随笔分类 -  设计模式

摘要:设计模式总结 设计模式(Design Patterns)是可复用面向对象软件的基础,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码,让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化, 阅读全文
posted @ 2015-07-31 20:35 Pickle 阅读(1919) 评论(1) 推荐(1) 编辑
摘要:组合模式(Composite Pattern)组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而... 阅读全文
posted @ 2015-07-31 17:02 Pickle 阅读(401) 评论(0) 推荐(0) 编辑
摘要:桥接模式核心:处理多层继承结构,处理多维度变化的场景。将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关联。 桥接模式特点: 桥接模式可以取代多层继承的方案。多层继承违背了单一职责原则。复用性较差。类的个数也非常多。桥接模式可以极大的减少子类的个数,从而降低管理和维护的成本。 桥... 阅读全文
posted @ 2015-06-04 23:21 Pickle 阅读(892) 评论(0) 推荐(0) 编辑
摘要:责任链模式:将能够处理同一类请求的对象连成一条链所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求, 如果能则处理,如果不能则传递给链上的下一个对象。优点:将请求者和发送者解耦简化对象的处理过程可以通过改变链中的成员或成员的顺序来动态的新增或则删除责任。缺点:不能保证请求一定会执行,可能... 阅读全文
posted @ 2015-06-04 00:27 Pickle 阅读(2885) 评论(0) 推荐(0) 编辑
摘要:代理模式:核心作用:通过代理控制对对象的访问,可以详细访问某个对象的方法,在调用这个方法前置处理,调用这个方法后做后置处理。 抽象角色:定义角色代理和真实角色的公共对外方法。 真实角色:实现抽象角色,定义真实角色所需要的实现的业务逻辑,供代理角色调用。 关注真正的业务逻辑!代理角色:实现抽象角色,是... 阅读全文
posted @ 2015-06-03 23:08 Pickle 阅读(948) 评论(0) 推荐(0) 编辑
摘要:享元模式: 场景:内存属于稀缺资源,如果有很多个完全相同或相似的对象,我们可以通过享元模式来节省内存。 核心:享元模式以共享的方式高效地支持大量细粒度对象的重用。 享元对象能做到共享的关键字是区分了内部状态和外部状态。 内部状态:可以共享,不会随着环境变化而改变。 外部状态:不可以共享,会随着... 阅读全文
posted @ 2015-06-03 17:57 Pickle 阅读(432) 评论(0) 推荐(0) 编辑
摘要:中介者模式:如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量的多对多关系,将导致关系及其复杂,这些对象称为“同事对象”, 我们可以引入一个中介者对象使各个同时对象只跟中介者对象打交道。将复杂的网络结构化解为如下的星形结构。使用中介者模式来 集中相关对象之间复杂的沟通和控制方式。优点: 通... 阅读全文
posted @ 2015-06-02 15:57 Pickle 阅读(819) 评论(1) 推荐(0) 编辑
摘要:状态模式:用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。 结构:Context环境类:环境类中维护一个State对象,它定义了当前的状态 。 State:状态接口 ConcreteState: 具体的状态类,封装了每一个具体类的对应行为。 应用场景: 线程对象各个状态的切换 店房间... 阅读全文
posted @ 2015-06-01 17:23 Pickle 阅读(1491) 评论(0) 推荐(0) 编辑
摘要:外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。 简单的说,外观模式就是把复杂的系统的具体操作封装起来,只暴露一个简单的接口,做和众多子系统之间松耦合。 提到一个设计原则:最少知识原则,只和你的密友谈话。(HeadFirst中的描述)具体的说就... 阅读全文
posted @ 2015-05-30 21:42 Pickle 阅读(668) 评论(0) 推荐(0) 编辑
摘要:迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,让我们能游走与聚合内的每一个元素,而又不暴露其内部的表示。 把游走的任务放在迭代器上,而不是聚合上这样简化了聚合的接口和实现,也让责任各得其所 提供一种可以遍历聚合对象的方式,又称为:游标cursor模式 聚合对象:存储数据 迭代器:遍历数... 阅读全文
posted @ 2015-05-30 21:13 Pickle 阅读(340) 评论(0) 推荐(0) 编辑
摘要:备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式。 备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原... 阅读全文
posted @ 2015-05-30 17:29 Pickle 阅读(1035) 评论(0) 推荐(0) 编辑
摘要:当创建给定的实例的过程很昂贵或非常复杂的时候,就使用原型模式来拷贝,这种方式在创建对象要耗费很多资源的时候效率提升显著。 实现深度克隆有两种方法,一种是实现Cloneable接口,重写clone()方法。另一种是通过序列化反序列化来获取对象的拷贝。 看一个介绍:http://blog.csdn.n... 阅读全文
posted @ 2015-05-30 17:09 Pickle 阅读(457) 评论(0) 推荐(0) 编辑
摘要:模板方法模式:模板方法模式是编程中经常用到的模式,它定义了一个操 作中的算法骨架,将某些步骤延迟到子类中实现。这样,新的子类可以在 不改变一个算法结构的前提下重新定义该算法的某些特定的步骤。 核心:处理某个流程的代码已经都具备,但是其中某个节点的代码暂时不 能确定。因此采用工厂方法模式将这个节点... 阅读全文
posted @ 2015-05-30 16:53 Pickle 阅读(583) 评论(0) 推荐(0) 编辑
摘要:命令模式:将一个请求封装为一个对象,从而使我们可以用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。也称之为:动作模式,事务模式。例如数据库的底层架构实现就是一种命令模式。 一个具体的命令来实现命令接口,并且通过Reciever的action()实现execute()方... 阅读全文
posted @ 2015-05-30 16:45 Pickle 阅读(1348) 评论(0) 推荐(0) 编辑
摘要:HeadFirst中的定义:适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。 适配器模式将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能在一起 工作的类可以在一起工作。 目标接口(Target):客户所期待的接口。目标可以... 阅读全文
posted @ 2015-05-22 16:11 Pickle 阅读(530) 评论(0) 推荐(0) 编辑
摘要:HeadFirst中并没有把建造者模式(生成器模式)当做常用的设计模式来讲解,只是在附录中一带而过。 建造者模式的本质: 分离了对象组件的单独构造(由Builder来负责)和装配(由Director)来负责。从而可以构建出复杂的对象。这个模式适用于:某个对象的构建 过程复杂的情况先使用。由于实现了... 阅读全文
posted @ 2015-05-21 22:23 Pickle 阅读(518) 评论(0) 推荐(1) 编辑
摘要:工厂模式用来实例化对象并且实现实现与调用分离,用工厂模式来替代new。 来看看这位老兄总结的吧,不想废话了。http://www.cnblogs.com/poissonnotes/archive/2010/12/01/1893871.html 工厂模式有三种: 1. 简单工厂模式 2. 工厂方法模... 阅读全文
posted @ 2015-05-20 23:58 Pickle 阅读(494) 评论(0) 推荐(0) 编辑
摘要:HeadFirst中对单例模式的定义:单例模式确保一个类只有一个实例,并只提供一个全局访问点。单例模式的应用:任务管理器、回收站、项目的配置文件、日志文件等等单例模式的特点:单例模式只有一个实例,减少了系统的开销,当一个对象的产生需要很多资源时,就可以通过在启动时来创建一个实例永久的驻存。可以在全... 阅读全文
posted @ 2015-05-20 15:51 Pickle 阅读(593) 评论(0) 推荐(0) 编辑
摘要:HeadFirst中装饰者模式的定义:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的的替代方案。 装饰模式的职责:动态的为一个对象增加新的功能。装饰模式是一种用于代替继承的技术,无需通过继承增加子类就可以扩展对象的功能,使用对象的关联关系代替继承关系,更加灵活,同时避免类型... 阅读全文
posted @ 2015-05-17 23:22 Pickle 阅读(1156) 评论(0) 推荐(0) 编辑
摘要:HeadFirst中对观察者模式的定义:观察者模式定义了对象之间的一对多的依赖,这样一来,当一个状态发生变化时,它的所有依赖者都会收到通知并自动更新。松耦合:当两个对象时间松耦合,它们依然可以交互,但是不太清楚彼此的细节。观察者模式提供了一种对象设计,让主题和观察者之间的松耦合。 有两种自动更细的... 阅读全文
posted @ 2015-05-13 00:22 Pickle 阅读(526) 评论(0) 推荐(2) 编辑