设计模式(2)
结构型设计模式
适配器
当遇到具体实现与定义的抽象接口不匹配时,为了成功实现功能,引入一个适配器。使其同时能满足所需接口与具体实现之间的关系。
遵守合成复用原则,则应该将对应实现类引入适配器类进行组合。
桥接
当维度过多时,如果全部定义为接口进行实现,会导致实现类众多而繁杂,应该将其中最重要的维度作为抽象类,其余维度引入作为变量,这样方便设定
装饰
在不改变类本身功能的前提下,对类的行为进行额外的补充,可以进行嵌套
外观
由于多流程,导致访问类种类多繁杂,并且客户端与各项服务之间关联性强,此时可以使用一个“门面”,将各个流程响应的方法统一一下,由门面向具体实现派发任务,相当于找门面就能直接完成流程
代理
当一个对象不便于直接访问,借助代理类进行访问
与装饰模式的区别在于,装饰器是对自身的加强,使用的还是本身,增强的就是和业务有关的,而代理模式使用的就是代理类,是由代理类进行负责做事情,添加的行为一般与业务无关。
享元
将重复出现的内容,作为共享内容,无需多次创建,每次需要就向享元工厂请求即可。
组合
就是将多个组件组合成为一个组件,或者是组件中包含组件
行为型设计模式
解释器
模板方法
在一套操作中,有些固定的,有些是变化的,固定方法先写好,变化方法根据子类变化而不同就由子类延迟实现,但是最后的总体操作时相同的。
责任链
迭代器模式
详情参见各类集合的迭代器模式
中介者模式
如果由很多对象,那么做一件事情可能需要错综复杂的对象调用关系
如果引入中介就相对清晰
备忘录模式
在某个时间节点,建立一个记录,在出错时可以进行回溯操作,例如CTRL+Z
观察者模式
当对象发生变化时,可能会导致其他对象发生变化,因此可以创建观察者监控对象的变化,通常将观察者对象直接引入需要观察的对象。
状态模式
不同状态下有不同行为,一般是自发转换
命令模式
策略模式
同样是不同状态下有不同行为,但一般是使用者主动转换
访问者模式
不同角色对同一事件或对象有不同的行为,将不同操作与对象属性进行分离。