设计模式

183 阅读8分钟

资源

Java设计模式:23种设计模式全面解析

设计模式 | 菜鸟教程 (runoob.com)

设计模式_刘望舒的博客

设计模式_割韭韭的博客

设计模式_xingjiarong的博客

设计模式基本原则

设计模式基本原则 - 掘金 (juejin.cn)

创建型模式

创建型模式关注对象的创建过程。

在什么时候用创建型模式?

折纸飞机时手搓,造飞机时用工厂。

什么时候用抽象?

当一个功能需要考虑可拓展性或很多类具有功能上或概念上的相似性时,为方便替换,解耦,需要考虑将共有的方法、功能抽象。

工厂模式

定义:定义一个创建对象的接口,但是让子类去决定让哪一个类实例化。

理解:为抽象产品设计一个抽象工厂,为具体产品实现相应工厂。

工厂方法模式_xingjiarong的博客

抽象工厂模式

定义:提供一个创建一系列相关或具有相互依赖对象的接口,而无需指定他们具体的类。

理解: 定义一系列抽象产品,为这些抽象产品设计一个抽象工厂,每个具体工厂实现某一系列具体产品。

与工厂模式区别在于一个是一对一,一个是一对多。

抽象工厂模式_xingjiarong的博客

建造者模式

定义:将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。

理解:为复杂对象的组装过程单独建立一个组装者类,实现复杂对象的组装与零件的创建解耦。

创建者模式(Builder)_xingjiarong的博客

单例模式

单例模式_xingjiarong的博客

原型模式

原型模式_xingjiarong的博客

结构型模式

结构型模式关注对象间组合,使其能实现更强大的功能。

适配器模式

定义:将一个类的接口转换为客户希望的另一个接口,让那些不兼容的类一起工作。

理解:适配器模式的重点在于转换,如果有一个或多个适配者类A,A的方法不能被修改或不想被修改,客户端想以一种A类不能直接支持的方式调用A能实现的功能,这个时候就需要适配器对A的功能进行转换,组装等操作,使客户端能间接调用A类实现目标功能。
适配器模式_xingjiarong的博客

门面模式

定义:为子系统中一组接口提供一个统一的入口,使得操作这个子系统更加方便。

理解:门面模式重点在于对子系统的封装和功能的组装,使得 操作子系统中复杂的子模块 和 实现需要调用多个模块才能实现的复杂功能变得容易。

门面模式(Facade Pattern 外观模式)_xingjiarong的博客

代理模式

定义:给某一个对象提供一个代理或占位符,并由代理对象来控制对原有对象的访问。

理解:代理模式重点在于对功能的增强,使得原本功能类不容易实现的功能 在被代理后 使得实现该功能变得可能、容易或更加符合预期目标。 
一般代理类与目标类继承同样的接口,实现相同的方法。

代理模式的使用总结_张彦峰ZYF的博客

桥接模式

定义:将抽象部分与他的实现部分解耦,使得两者都能够独立变化。  

理解:桥接模式重点在于同一物体不同部分实现的组装,例如一台电脑,由不同零部件组成,一般操作是像桥接模式一样将各种零部件组装起来形成一类新电脑,而不是因为显卡或其他某个零件有微小的变化就为这个电脑新建一个类。  

即将一个整体看成零件的组装,而不是将一个复杂对象看成一个不可分割的整体。
桥梁模式(Bridge)_xingjiarong的博客

装饰模式

定义:动态的给一个对象增加新的功能或职责,就拓展功能而言,装饰模式提供了一种比使用子类更加灵活的实现方案。  

理解:装饰模式重点在于功能的动态增加。   
装饰模式(Decorator)_xingjiarong的博客

组合模式

定义:组合多个对象形成树形结构以表示既有整体部分关系的层次结构,组合模式可以让客户端统一对待单个对象和组合对象。

理解:实体对象和容器对象继承同一个接口,形成树形结构,有相同格式的方法调用,可以以统一的格式调用容器和实体,便于进行遍历,递归操作和对象的动态增减。
组合模式(CompositePattern)_码农架构的博客

享元模式 #

定义:运用共享技术有效的支持大量细粒度对象的复用。

理解:仓库,想用什么找什么。
深入理解享元模式_书呆子Rico的博客

行为型模式

行为型模式关注系统中对象间的交互,研究系统在运行时对象间的交互与通信,进一步描述对象的职责。

职责链模式

定义:避免讲一个请求的发送者与接收者耦合在一起,让多个对象都有处理机会,将接受请求的对象连接成一条线,并且沿着这条线传递请求,直到请求被处理或经过所有处理者。

理解:定义一个接收者共同行为模式的接口,不同的具体接收者形成职责链按照预定职责接受、传递并处理请求。

责任链模式_xingjiarong的博客

命令模式

定义:将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。

理解:命令模式侧重于一个调用者可以调用多种接收者,将命令抽象成统一的格式,具体的命令按照接口定义的格式编写,实现请求者与接收者间解耦,一个请求者可以通过格式相同但内容不同的命令对不同的接收者发出请求。

例子:客户端页面可以通过不同请求内容(请求方式的差异post、get等或请求路径的不同)对服务器进行不同的请求,但格式都是http请求报文。

命令模式(Command模式)详解_fedorafrog的博客

状态模式

定义:允许一个对象在其内部状态改变时改变他的行为,对象看起来似乎改变了他的类。

理解:状态模式重点在于同一对象内部不同状态在运行期间的动态转换。

状态模式_pengjunlee的博客

策略模式

定义:定义一系列基础算法,将每一个算法封装起来,并让他们可以相互替换,策略模式让算法独立于使用他的对象而变化。

理解:策略模式重点在于算法实现的选择,一个算法可以有多种实现,但多种实现都是为了同一个目的。

策略模式_xingjiarong的博客
策略模式 VS 状态模式

迭代器模式

定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。

23种设计模式(13):迭代器模式_割韭韭的博客

中介者模式

定义:定义一个对象来封装一系列对象的交互,中介者模式使各对象之间不需要显示的相互引用,从而使其耦合松散,而且用户可以独立地改变它们之间的交互。

理解:将类间复杂的交互关系、调用操作分类集中到中介者类的各个方法中,实现类间松耦合。

中介者模式 | 菜鸟教程 (runoob.com)

备忘录模式 #

定义:在不破坏封装的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。

备忘录模式_割韭韭的博客

观察者模式

定义:定义对象间的一种一对多的依赖关系,使的每一个对象状态发生改变时其依赖对象皆得到通知并被自动更新。

观察者模式_刘望舒的博客

模板方法模式

定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类不改变一个算法的结构即可重定义该算法的某些特定步骤。

模版方法模式_割韭韭的博客

访问者模式 #

定义:表示一个作用于某对象结构中各个元素的操作。访问者模式让用户可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

访问者模式_割韭韭的博客

解释器模式 #

定义:给当一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

解释器模式_割韭韭的博客