设计模式--Facade,Mediator,Singleton
原创
©著作权归作者所有:来自51CTO博客作者zmhot88的原创作品,谢绝转载,否则将追究法律责任
Facade(外观)--对象结构型模式
意图
为子系统的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更容易使用
适用性
- 当你要为一个复杂子系统提供一个简单接口时。
- 客户程序与抽象类的实现部分之间存在着很大的依赖性。
- 当你需要构建一个层次结构的子系统时,使用facade模式定义子系统中每层的入口点。
结构
协作
- facade对客户屏蔽子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便。
- facade实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的。
- 如果应用需要,facade并不限制使用子系统类。因此你可以在系统易用性和通用性之间加以选择。
实现问题
- 降低客户-子系统之间的耦合度
- 公共子系统和私有子系统类
mediator模式与facade模式的相似之处是,它抽象了一些已有的类的功能。然而,mediator的目的是对同事之间的任意通讯进行抽象,通常集中不属于任何单个对象的功能。mediator的同事对象知道中介者并与它通信,而不是直接与其他同类对象通信。相对而言,Facade模式仅对子系统对象的接口进行抽象,从而使它们更容易使用;它并不定义新功能,子系统也不知道facade的存在。
Mediator(中介者)--对象行为型模式
意图:
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间地交互。
适用性
- 一组对象以定义良好但是复杂的方式进行通信。产生地依赖关系混乱且难以理解。
- 一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。
- 想定制一个分布在多个类中地行为,而又不想生成太多地子类。
结构
效果
- 减少了子类生成
- 它将各Colleague解藕
- 它简化了对象协议
- 它对对象如何协作进行了抽象
- 它使控制集中化
实现
- 忽略抽象地Mediator类
- Colleague--Mediator通信
Facade模式是以明显且受限地方式来施加它的策略,而Mediator模式则是以隐藏且不受限的方式施加它的策略。
Singleton模式
关于这个模式是在什么都不想记了,南京瞬连两次以这个问题来面试。
singleton两种方式,一种是类初始化,一种是在instance()种初始化。
Monostate模式
mono+state单一状态,通过把所有属性定义为static,来实现state单一,不论实例化多少对象,属性总是唯一的。这个模式不在GOF的23个模式中。