11 2017 档案
摘要:享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象. 下面是一个享元模式的demo: 上面类的设计如下图: 享元模式可以避免大量非常相似类的开销,在程序设计中,有时会生成大量细粒度的类实例来表示数据,如果这些实例除了几个参数外基本相同,就可以把参数已到实例外面,在
阅读全文
摘要:中介者模式(Mediator Pattern):用一个对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,从而使耦合松散,而且可以独立地改变它们之间的交互. 下面是一个中介者模式的demo: 上面类的设计如下图: 由于把对象如何协作进行了抽象,将中介作为一个独立的概念并将其封装在一个独立
阅读全文
摘要:职责链模式(Chain Of Responsibility):使多个对象都有机会处理请求,从而避免发送者和接收者的耦合关系。将对象连成链并沿着这条链传递请求直到被处理 下面是一个设计模式的demo: 上面类的设计如下图: 接收者和发送者都没有对方的明确信息,且链中的对象自己并不知道链的结构,职责链可
阅读全文
摘要:命令模式(Command Pattern):将请求封装成对象,从而使可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作. 下面是一个命令模式的demo: 上面类的设计如下图: 优点: 可以较容易的设计一个命令队列 可以较容易的将命令记入日志 允许接收请求的一方决定是否要否
阅读全文
摘要:桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化. 下面是一个桥接模式的demo: 上面类的设计如下图 桥接模式的核心意图就是把类的实现独立出来,让他们各自变化。这样使每种实现的变化不会影响其他实现,从而达到应对变化的目的 作者:Andy 出处:http
阅读全文
摘要:单例模式(Singleton Pattern):保证类仅有一个实例,并提供一个访问它的全局访问点. 下面是单例模式的demo: 上面类的设计如下图: 单例模式因为Singleton类封装它的唯一实例,这样可以控制客户怎样访问和何时访问它,简单的说就是对唯一实例的受控访问 比如只有第一次被引用的时候才
阅读全文
摘要:迭代器模式(Iterator Pattern):提供方法顺序访问一个聚合对象中各元素,而又不暴露该对象的内部表示. 下面是一个迭代器模式的demo: 上面类的设计如下图: 当需要对聚集有多种方式遍历时,可以考虑使用迭代器模式 迭代器模式分离了集合的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不
阅读全文
摘要:组合模式(Composite Pattern):将对象组合成成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性. 下面是一个组合模式的demo: 上面类的设计如下图: 应用场景: 在需要体现部分与整体层次的结构时 希望用户忽略组合对象与单个对象的不同,统一
阅读全文
摘要:备忘录模式(Memento Pattern):不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,这样已经后就可将该对象恢复到原先保存的状态 下面是一个备忘录模式的demo: 上面的类的设计如下图: Originator(发起人):负责创建一个备忘录Memento,用以记录当前时
阅读全文
摘要:适配器模式(Adapter Pattern):将一个类的接口转换成为客户希望的另外一个接口. 下面是一个适配器模式的demo: 上面类的设计如下图: 系统数据和行为都正确,但接口不符合时,目的是使控制范围之外的一个原有对象与某个接口匹配,适配器模式主要应用于希望复用一些现存的类,但接口又与复用环境不
阅读全文
摘要:状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 下面是一个状态模式的demo: 上面类的设计如下图: 应用场景:当控制一个对象的状态转换的条件表达式过于复杂时,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化
阅读全文
摘要:抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的类 下面是一个抽象工厂的demo: 上面类的设计如下图: 优点: 具体工厂类如MysqlFactory在一个应用中只需要初始化一次,这样改动一个具体工厂变得很容易,只需要改变
阅读全文
摘要:观察者模式(发布-订阅模式 Publish Subscribe Pattern):定义了一种一对多的关系,让多个观察对象同时监听一个主题对象,当主题对象状态发生变化时会通知所有观察者,是它们能够自动更新自己,是一种行为设计模式。 观察者模式的结构 1,Publisher 会向其他对象发送值得关注的事
阅读全文
摘要:建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 下面是一个建造者模式的demo 上面类的设计如下图: 指挥者Director 调用建造者Builder的对象 具体的建造过程是在Builder的子类中实现的 作者:Andy 出处:
阅读全文
摘要:外观模式(Facade Pattern):为子系统中的一组接口提供一个一致界面,此模式定义一个高层接口,使得子系统更加容易使用 下面是一个外观模式的demo: 上面类的设计如下图: Fund类需要知道子系统类的功能,以便将适当的client请求发送给合适的子系统对象,使子系统的使用更加简单 作者:A
阅读全文
摘要:模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,将一些步骤延迟至子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 下面是一个模板方法模式的一个demo: 上面类的设计如下图: NewPaper是抽象类,定义抽象模板并实现了抽象
阅读全文
摘要:原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 一个原型模式的简单demo: 上面类的设计如下图: 简历类Resume继承抽象原型的clone和deepclone方法,实现对简历类的复制,并且简历类引用工作经历类,可以在复制简历类的同时
阅读全文
摘要:工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延时到其子类. 上面类的设计如下图: 创建一个抽象工厂类CreateLeiFeng和一个抽象对象类LeiFeng,当创建具体leifeng对象-Undergra
阅读全文
摘要:代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问 上面的类的设计如下图: 代理类Proxy引用代理的实体Pursite,提供与Pursite相同的接口来代替实体 作者:Andy 出处:http://www.cnblogs.com/onepiece-andy/ 本文
阅读全文