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

进大厂! 欢迎关注微信公众号,第一时间掌握最新动态!