设计模式中24个模式说明

1、  简单工厂模式

简单工厂模式定义了一个工厂类来负责创建其他类的实例,通过配置xml文件中要创建的子类名称,工厂类则会根据xml文件读取节点获取数据并创建对应的实体类,这样就做到了更改创建的实体类时,无须修改客户端代码,只需修改配置文件就可以了,让程序更加符合开闭原则。

2、  工厂方法模式

工厂方法模式是简单工厂模式的进一步的扩展。在简单工厂模式下,一个工厂负责创建多种子类;而在工厂方法模式下,一个工厂负责创建一种子类,把负责创建的工厂抽象为一个抽象工厂父类,这样就形成了工厂方法模式。

3、  抽象工厂模式

抽象工厂模式是工厂方法模式的泛化,工厂方法模式是一种特殊的抽象工厂模式。抽象工厂模式,一个工厂可以创建多种具体产品,如果一个工厂只负责创建一种产品,则就会退化为工厂方法模式。

4、  建造者模式

建造者模式就是将一个复杂的对象创建分成多个部分,一步一步创建每一部分,指挥者只需要指定复杂对象的内容和类型就可以了。建造者模式包含四个角色:抽象建造者、具体建造者、具体产品和指挥者。

5、  原型模式

原型模式就是通过自我复制来创建多个相同的对象,这样在系统中,有些对象的创建过程比较复杂,又需要经常创建,这时通过原型模式就可以节约创建该对象时所费的资源和时间。原型模式又分为深克隆和浅克隆,简单来说深克隆就是开辟新的空间来储存对象,浅克隆则是多个对象指向同一内存地址。

6、  单例模式

单例模式的目的就是确保一个类仅有一个实例,你无法自己创建实例和实例化该实例,单例模式会自行实例化并向全局提供该实例的访问方法。

7、  适配器模式

在现实生活中,我们经常需要使原本不兼容的事物可以一起工作,所以我们需要一个新的设备来做中间转换,这就是适配器。将一个接口转换成客户需要的另一个接口。

8、  桥接模式

桥接模式,顾名思义就是在两个事物之间建立连接,也就是接口。这样做主要为为了解决多个事物间的排列组合问题,如果不用桥接,那么每一个事物类型都需要建立一个连接,这样做回大大增加基础类的数量,显然是不可行的。

9、  组合模式

我自己对组合模式的理解是有点递归调用的意思,一个对象包含普通对象和容器对象,而容器对象又可以包含普通对象和容器对象。具体的例子就是文件夹目录系统。

10、装饰模式

装饰模式可以对原有对象的功能进行拓展。对需要装饰接口进行重写,然后再放入成员变量中,在构造函数中对其进行赋值,实现接口对象的变换。但是这种关系在最初设计的时候就要考虑到,将需要装饰的对象设计为接口,但是装饰模式这名字要解决在非接口,也就是能解决具体类的装饰问题似的。

11、外观模式

外观模式为一组接口提供一个一致的界面。我觉得系统根据用户的权限设计菜单可以用到这个模式,但是书中的例子写得过于简单,而且不提切,觉得和建造者模式差不多了。不过知道外观是在结构上,而建造者更倾向于创建。

12、享元模式

享元模式解决的就是对象的复用,与原型模式不同,享元模式通过共享来实现相同或相似对象的重用,极大减少了内存中对象的数量。

13、代理模式

在自己不想直接调用某类时,我们就通过一个代理来实现间接调用。代理模式中的代理类就相当于中间代理商,比如一些论坛和中间商。

14、职责链模式

职责链模式相当于一条处理链,通过对传过来的对象的解析,来判断是不是需要他来处理的,如果是,就处理该对象,如果不是,则传输给下一环节。

15、命令模式

命令模式是将命令进行封装,将发出命令的责任和执行命令的责任分开。命令模式的类像一个遥控器一样,可以对注册其中的对象进行对应的操作。将命令模式进行修改,还可以设计成如果上一个命令未执行完毕就另下一个命令等待的功能。

16、解释器模式

解释器模式是自定义一个新的语言,用解释器解释符合该语言的句子。

17、迭代器模式

提供一种方法来访问聚合对象,而不用暴露这个对象的内部。

18、中介者模式

中介者模式封装一系列对象控制其交互,对象间没有显式的交互。如聊天室中发送者只需要考虑将消息发送给聊天室,每个成员接到消息是聊天室负责遍历发送的。

19、备忘录模式

备忘录模式是在不破话封装的前提下,捕获一个对象的状态进行保存和用来恢复的。实现撤销功能就是需要用到这个模式,也是需要建立一组对象结构用于储存,缺点是耗费内存。

20、观察者模式

观察者模式是定义一种一对多的关系,当一个对象状态发生变化时,其依赖对象得到消息。我觉得观察者模式是最不贴切的名字,因为这个消息是产生变化的对象主动发出的,而不是观察者监测到的。

21、状态模式

一个对象有多种状态,在其内部状态改变时,对相应改变其自身的行为。状态模式描述了对象状态的变化以及对象在每一种状态下对应的行为。

22、策略模式

策略模式通常是把一系列的算法封装到一系列的策略里面,简单来说,就是将每一个算法封装起来,使它们可以互换。

23、模板方法

使得子类可以不改变一个算法的结构即可重定义该算法的某些步骤。我觉得这个方法更适合与团队开发,有了模板,那么每个人即使写自己的类,其他人调用的时候也会有章法,知道每个方法的含义,不会出现只有自己认识自己的方法名的尴尬了。

24、访问者模式

访问者模式可以在不改变各元素的类的前提下定义这些元素新的操作。本章的例子我没觉得体现这层里面,感觉有些像观察者模式和命令模式的集合,例子体现的是将被观察者集合封装到一个命令对象,再有命令对象统一向观察者发送消息。

原文地址:https://www.cnblogs.com/java-meng/p/6666180.html