1219 2019-09-30 2020-06-25
前言:如果觉得麻烦,不妨直接看总结。
一、概述
结构型模式(Creational Patterns)主要用于描述对类或对象怎么交互和怎样分配职责,GoF提供了11中行为型模式,分别是
- 职责链模式(Chain of Responsibility)
- 命令模式(Command)
- 解释器模式(Interpreter)
- 迭代器模式(Iterator)
- 中介者模式(Mediator)
- 备忘录模式(Memento)
- 观察者模式(Oberver)
- 状态模式(State)
- 策略模式(Strategy)
- 模板方法模式(Template Method)
- 访问者模式(Visitor)
二、职责链模式
1、概述
定义:将多个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
说明:链上的对象逐个判断是否有能力处理该请求,如果能则处理,反之则传递给链上的下一个对象。
2、类图
3、简单代码
Leader first = new FirstLeader("一级领导");
Leader second = new SecondLeader("二级领导");
first.next = second;
Request request = new SimpleRequest("张三", 30);
first.handler(request);
三、命令模式
1、概述
定义:将一个请求封装成一个对象,从而参数化向服务端发送请求。
说明:将请求的发送者与请求的接受者分离,通过抽象编程的方式,使得相同的请求发送者可以作用于不同的请求接受者。
2、类图
3、简单代码
Calculator clr = new Calculator();
AbstractCommand command = new AddCommand();
clr.setCommand(command);
clr.compute(10);
clr.undo();
小结:命令模式将请求调用者和请求接受者解耦,当添加新命令时不会影响到原有命令,但是可能会导致系统有过多的命令类。
四、解释器模式
定义:定义语言的语法,并且建立一个解释器来解释语言中的句子。
说明:自定义一个新的编程语言,该语言有一套自己的语法规范,如关键字和运算符等。比如各种模板引擎、Python。
五、迭代器模式
参见ArrayList讲解一文。
六、中介者模式
定义:用一个中介对象来封装一些对象的交互。
说明:引入一个中间对象,将系统从一个网状结构变成一个星型结构。比如QQ、Datax。
七、备忘录模式
定义:在不破换封装性的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态,这样以后就可以将该对象恢复到保存的状态。
说明:提供一个可以后悔的机制,使得对象可以恢复到某一个历史状态。
八、观察者模式
定义:定义对象间的一种一对多的依赖关系,以便当一个对象的状态发送改变时,所有依赖于它的对象都得到通知并做出反应。
说明:一个对象的行为将影响到一个或多个其他对象的行为。比如Swing里面的事件监听器、Web里面各种监听器。
九、状态模式
1、概述
定义:运行一个对象在其内部状态改变时,改变它的行为。对象看起来似乎修改了它所属的类。
说明:对象状态不同时其行为也不相同,切对象的状态可以发生转换。比如玩家等级、玩家称号等。
2、类图
3、简单代码
// 初始化内部state为PrimayState,各个子state里面存储着不同信息
Account account = new Account("张三");
// MiddleState
account.deposit(10);
// HighState
account.deposit(1000);
十、策略模式
说明:实现某功能存在多种方式,在不修改现有系统的基础上可以灵活选择或更好实现方式,也可以使用新的实现方式。比如Java的面向接口编程。
十一、模板方法模式
说明:在父类中提供一个方法定义一个操作序列,而将具体操作的实现放到子类中。比如Java中的抽象类。
十二、访问者模式
说明:表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下,定义作用于这些元素的新操作。实在是找不到例子。
十三、设计模式总结
设计模式听起来高大上,但其实很多都已经称为常识了,很多在无形之中就在用了。除了比较常用的几种设计模式,需要细细体会,剩余大部分都属于鸡肋。一切以实用为主,不可为了设计模式而设计模式.
总访问次数: 490次, 一般般帅 创建于 2019-09-30, 最后更新于 2020-06-25
欢迎关注微信公众号,第一时间掌握最新动态!