12.其他未介绍的设计模式概述-灵析社区

菜鸟码转

十二、 其它未介绍的设计模式概述

创建型

1、抽象工厂模式

抽象工厂模式是一种创建型设计模式,它提供了一种将客户端代码与具体实现分离的方式。在抽象工厂模式中,客户端不需要直接创建对象,而是通过一个抽象工厂接口来创建对象,从而使得客户端可以轻松地切换底层实现。

2、原型模式

原型模式是一种创建型设计模式,其主要目的是通过复制现有对象来创建新对象。它允许你创建一个可定制的对象,同时避免了创建子类的复杂性,并且可能对性能造成负面影响。

使用原型模式时,你首先需要创建一个原型对象,然后可以通过复制该对象来创建新的实例。这个过程通常称为克隆。在克隆过程中,可以选择深度克隆或浅度克隆。浅度克隆只复制原型对象本身及其属性,而深度克隆会递归地复制整个对象图。

原型模式适用于那些希望避免编写许多重复代码的场景,或者那些需要根据不同配置或参数生成多个相似对象的场景。

原型模式的主要思想就是通过克隆已有的对象来创建新的对象。在实现原型模式时,通常需要实现一个 clone() 方法或者使用 Java 内置的 clone() 方法来完成对象的复制操作。

Java 中的 clone() 方法会创建一个与原始对象相同的副本,并返回一个新的对象引用。默认情况下,clone() 方法执行的是浅度克隆,即只复制对象本身及其属性,而不复制关联对象。如果需要进行深度克隆,则需要手动编写复制逻辑。

需要注意的是,Java 中的 clone() 方法虽然可以帮助我们实现原型模式,但是其实现过程中可能会面临一些问题。例如,对于包含可变对象的复杂对象,浅度克隆可能会导致意外的对象状态共享,从而产生难以调试的错误。因此,在实现原型模式时,需要特别注意对象的复制方式,并确保新对象的状态与原对象保持独立。

结构型

1、组合模式

组合模式是一种结构设计模式,它允许你将对象组成树形结构,并且可以以相同的方式处理单个对象和整个对象树。在组合模式中,每个对象都是“组件”,并且可以是叶子节点或容器节点。容器节点可以包含其他组件(即叶子节点或其他容器节点),从而形成嵌套的组件树。

2、享元模式

享元模式是一种结构型设计模式,它的主要目的是通过共享对象来有效地支持大量细粒度的对象。在享元模式中,如果多个对象具有相同的状态,则可以将这些状态抽象出来,作为一个共享的对象成为享元对象。其他对象可以引用这个享元对象而不必拥有自己的副本,从而实现了内存的优化。

例如,假设我们有一个文本编辑器,并且需要在编辑器中显示大量的字符。如果每个字符都是独立的对象,那么很快就会导致内存占用过高。但是,如果我们使用享元模式,将字符的字体、大小等属性抽象出来,作为享元对象,那么每个字符只需要引用这个享元对象即可,从而显著降低内存消耗。

总之,享元模式适用于需要创建大量相似对象的场景,它可以帮助我们节省内存开销,并提升系统性能。

行为型

1、命令模式

命令模式是一种行为设计模式,它允许将请求封装成一个对象,从而使你能够对请求进行参数化、队列化或记录日志,并支持可撤销操作。在命令模式中,客户端不直接与接收者交互,而是通过调用命令对象来间接地执行请求。这些命令对象可以被存储、序列化、传递,从而增加了应用程序的灵活性和扩展性。通常,命令模式由四个部分组成:命令接口、具体命令类、调用者(又称为发起者)和接收者。

2、迭代模式

迭代模式是一种行为设计模式,它允许你透过一个对象的集合,依次访问该集合中的每个元素,而又不暴露该集合的底层实现。迭代模式常被用于处理列表、数组或其他集合类型的数据结构。在迭代模式中,迭代器对象扮演着重要的角色,它负责维护当前迭代的位置,并提供方法以获取下一个元素、判断是否还有更多元素等操作。这使得客户端代码可以通过迭代器对象逐个遍历集合元素,而不需要了解集合的内部实现细节。同时,由于迭代器对象与集合分离,可以支持同时对同一集合进行多个遍历操作。

3、责任链模式

责任链模式是一种行为设计模式,它允许你将请求沿着处理者链进行传递,直到其中一个处理者能够处理该请求。责任链模式常常用于解耦发送者和接收者之间的关系,从而可以灵活地组织处理者的顺序和职责。在责任链模式中,每个处理者(也称为链的节点)都包含一个指向下一个节点的引用,在接收到请求时,首先自行判断是否有能力处理该请求,如果不能,则将请求转发给下一个节点。由于请求的处理过程一直持续到某个处理者成功处理请求或所有处理者都无法处理请求为止,因此该模式被称为责任链。

4、访问者模式

访问者模式是一种行为设计模式,它允许你在不修改对象结构的情况下定义新的操作。该模式通过将操作(也称为访问者)从对象结构中分离出来,使得可以独立地对这些操作进行扩展和重用。

在访问者模式中,对象结构由一组元素组成,每个元素都实现了公共接口。同时,该模式定义了一个抽象访问者接口,该接口包含了每个元素所支持的访问者操作。具体访问者类将实现这些操作,并将其应用到元素上。在访问者模式中,访问者对象将遍历整个对象结构,并依次对每个元素进行处理。

访问者模式通常用于解决以下问题:

  • 对象结构中的元素可以支持多个不同的操作,但是添加新的操作会导致对象结构的修改。
  • 需要对对象结构中的元素进行复杂的逻辑处理,而不是简单的属性或方法调用。

5、备忘录模式

备忘录模式是一种行为设计模式,它允许你在不破坏对象封装性的情况下,捕获并存储一个对象的内部状态,并在需要时恢复该对象。这种模式通常用于需要提供撤销、重做或历史记录功能的应用程序中。

在备忘录模式中,原发器(或称为发起人)负责创建备忘录对象,并将其保存到备忘录管理者(或称为负责人)中。同时,原发器还可以从备忘录管理者中检索特定时间点的备忘录对象,并使用该备忘录对象来恢复其先前的状态。

6、中介者模式

中介者模式是一种行为设计模式,它允许你通过封装对象间的交互方式,来降低系统中各个对象之间的耦合度。在中介者模式中,单个对象(称为中介者)将负责协调其他对象之间的通信,并对每个对象的行为作出响应。

7、解释器模式

解释器模式是一种行为设计模式,它允许你定义一种语言,并使用该语言来解释特定问题域中的表达式。在解释器模式中,每个表达式都由一个或多个基本表达式和运算符组成,而这些表达式和运算符则根据特定的语法规则进行组合。

8、状态模式

状态模式是一种行为设计模式,它允许你根据对象的内部状态改变其行为。在状态模式中,对象的行为取决于其当前状态,并且可以通过切换状态来更改其行为。

阅读量:2012

点赞量:0

收藏量:0