基本要素
模式名称
解决方案
描述了设计模式的组成部分,以及这些组成成分之间的相互关系,相互职责和协作方式
效果
描述了模式应用的效果以及在使用模式时应权衡的问题
概念
设计模式是在特定环境下为解决某一通用软件设计问题提供的一套定制的解决方案,该方案描述了对象和类之间的关系
行为型模式
职责链模式
概念
避免将一个请求的发送者与接受者耦合在一起,让多个对象都有机会处理请求。将接受请求的对象连接成一条链,并且沿着这条链传递请求,直到有一个对象能够处理它为止
理解
链状结构,所有的节点都有共同的父类,审核时每个节点都有自己的处理范围,如果不符合,就调用下一层级的节点处理
命令模式
将一个请求封装成一个对象,从而可用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作
解释器模式
概念
给定一个语言,定义它的文法的一种表达,并定义一个解释器,这个解释器使用该表达来解释语言中的句子
角色
抽象表达式
终结符表达式
非终结符表达式
环境类
理解
解释器,就是将一种语言解释成另一种语言
可以按照新语言的语法,将不同的主语谓语作为终结符,将一些关联语法或者表达式的作为非终结符
然后制定handle类来拼接终结符非终结符的语法,合并成新的语言类型
迭代器模式
概念
提供一种方法顺序访问一个聚合对象中的各个元素,而又不用暴露该对象的内部表示
角色
抽象迭代器
具体迭代器
抽象聚合类
具体聚合类
子主题
中介者模式
概念
定义一个对象来封装一系列对象的交互。终结者模式使对象之间不需要显式的相互引用。<br>从而使其耦合松散,而且用户可以独立的改变他们之间的交互<br>
角色
抽象中介者
具体中介者
抽象同事类
具体同事类
理解
解耦对象之间的关联关系,将关联关系转移到和中介者
组件都注册到中介者这里,组件之间相互关联的部分都在中介者中维护
备忘录模式
概念
在不破坏封装的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后对这个对象恢复到之前保存的状态<br>
观察者模式
概念
定义对象之间的一种一对多的关系,使得每当一个对象状态发生改变时其相关依赖对象皆得到通知并被自动更新
理解
处理一对多的一种解决方案
声明一个抽象目标,里面有具体的动作抽象方法和需要发布出去的方法
具体目标实现主要逻辑,需要发布出去的事件调用观察者的方法
观察者维护目标对象的集合,并且遍历这些对象的notify方法
状态模式
概念
允许一个对象在其内部状态改变时改变他的行为,对象看起来修改了它的类
策略模式
概念
定义一系列算法,将每一个算法封装起来,并让他们可以相互替换。策略模式让算法可以独立于使用它的客户而变化
模板方法模式
概念
定义一个才做系统中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
访问者模式
概念
表示一个作用于某对象结构中的各个元素的操作。访问者模式让用户可以再不改变各元素的前提下定义作用于这些元素的新操作
角色
抽象访问者
具体访问者
抽象元素
具体元素
对象结构
比较
适配器模式
一般是指调用第三方,比如文件转换器,可以有excel,xml的转换器。<br>结构上是继承目标类,然后将第三方的类引入,调用时,不调用目标类而是适配器<br>
代理模式
代理类型很多,一般都是在调用原有的方法的基础上增加一个代理类来进行一些额外的操作
结构上是和要代理的类有相同的父类,然后和要代理的类进行组合,重写父类方法,在方法中调用目标类的方法,不改变原有方法
装饰模式
和代理类中的引用代理功能上一致,即在原有方法的基础上进行额外操作。<br>不同是装饰模式可以重复装饰,比如在蛋糕上添加一个花,再添加一个花<br>
结构上装饰类和被装饰类有共同的父类,类的构造方法中参数是父类装饰类型,重写父类方法时调用目标类的方法,改变了原有方法
中介者模式
为了解决各个组件间的相互引用关系而引入的中介者类,将依赖关系解耦,和上面三种模式差别略大
结构上组件类和中介者组合关系,组件需要关联其他组件时,就要调用中介者的方法来实现。<br>并且组件要注册到中介者中,将自己的实例set到中介者中,典型案例:房产中介<br>