随笔分类 -  Design patterns(java)

摘要:设计模式六大原则(6):开闭原则定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。问题由来:在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。解决方案:当软件需要变化... 阅读全文
posted @ 2014-06-24 14:45 廖凯林 阅读(205) 评论(0) 推荐(0)
摘要:设计模式六大原则(5):迪米特法则定义:一个对象应该对其他对象保持最少的了解。问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。解决方案:尽量降低类与类之间的耦合。 自从我们接触编程开始,就知道了软件编程的总的原则:低耦合,高内聚。无论是面向过程编程还是面向对... 阅读全文
posted @ 2014-06-24 14:39 廖凯林 阅读(236) 评论(0) 推荐(0)
摘要:设计模式六大原则(4):接口隔离原则定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。问题由来:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。解决方案:将臃肿的接口I拆分为独立的几个... 阅读全文
posted @ 2014-06-24 14:34 廖凯林 阅读(693) 评论(0) 推荐(0)
摘要:设计模式六大原则(3):依赖倒置原则定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的... 阅读全文
posted @ 2014-06-23 17:51 廖凯林 阅读(206) 评论(0) 推荐(0)
摘要:肯定有不少人跟我刚看到这项原则的时候一样,对这个原则的名字充满疑惑。其实原因就是这项原则最早是在1988年,由麻省理工学院的一位姓里的女士(Barbara Liskov)提出来的。定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象... 阅读全文
posted @ 2014-06-23 17:44 廖凯林 阅读(222) 评论(0) 推荐(0)
摘要:设计模式六大原则(1):单一职责原则定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。解决方案:遵循单一职责原则。分别建立两个类T... 阅读全文
posted @ 2014-06-23 17:32 廖凯林 阅读(259) 评论(0) 推荐(0)
摘要:1. 概念 表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作2. 案例import java.util.ArrayList;import java.util.List;import java.util.Random;/** * * 声明接受哪一... 阅读全文
posted @ 2014-06-23 16:22 廖凯林 阅读(170) 评论(0) 推荐(0)
摘要:1. 概念 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤2. 案例 package org.demo.templatemethod.demo01;abstract class Template{ ... 阅读全文
posted @ 2014-06-23 15:25 廖凯林 阅读(91) 评论(0) 推荐(0)
摘要:1. 概念 定义一系列的算法,把他们一个个封装起来,并使他们可以互相替换,本模式使得算法可以独立于使用它们的客户。 2. 案例 package org.demo.strategy.demo01;abstract class Strategy{ abstract public void m... 阅读全文
posted @ 2014-06-23 15:17 廖凯林 阅读(118) 评论(0) 推荐(0)
摘要:1. 概念 允许对象在其内部状态改变时改变他的行为。对象看起来似乎改变了他的类。2. 案例 package org.demo.state.demo01;class Context{ private State state ; public Context(State state){ ... 阅读全文
posted @ 2014-06-23 15:11 廖凯林 阅读(150) 评论(0) 推荐(0)
摘要:1. 概念 定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新2. 案例 package org.demo.observe.demo01;import java.util.ArrayList;import java.util.Iterator;import ... 阅读全文
posted @ 2014-06-23 14:59 廖凯林 阅读(142) 评论(0) 推荐(0)
摘要:1. 概念在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态发起人:记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据。备忘录:负责存储发起人对象的内部状态,在需要的时候提供发起人需要的内部状态。管理角色:... 阅读全文
posted @ 2014-06-23 14:53 廖凯林 阅读(175) 评论(0) 推荐(0)
摘要:1. 概念 用一个中介对象封装一些列的对象交互2. 案例 实现下面的案例 类A和B,类中各有一个数字,要保证类B中的数字永远是类A中数字的100倍。即:当修改类A的数时,将这个数字乘以100赋给类B,而修改类B时,要将数除以100赋给类A。类A类B互相影响,就称为同事类 . 如果不使用中介者模式... 阅读全文
posted @ 2014-06-23 10:55 廖凯林 阅读(212) 评论(0) 推荐(0)
摘要:1. 概念 提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。2. 该模式在jdk中的iterator接口中有体现 具体可以看看 http://www.cnblogs.com/liaokailin/p/3799058.html 阅读全文
posted @ 2014-06-23 10:19 廖凯林 阅读(139) 评论(0) 推荐(0)
摘要:1. 概念 给定一个语言,定义他的文法的一个表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子2. 案例 package org.demo.interprerted.demo01;import java.util.ArrayList;import java.util.List;/** *... 阅读全文
posted @ 2014-06-23 10:12 廖凯林 阅读(132) 评论(0) 推荐(0)
摘要:1. 概念 将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作。2. 案例 package org.demo.command.demo01;/** * 将一个请求封装为一个对象, * 从而使你可用不同的请求对客户进行参数化; * 对请求... 阅读全文
posted @ 2014-06-23 10:09 廖凯林 阅读(112) 评论(0) 推荐(0)
摘要:1. 概念 使多个对象都有机会处理请求,从而避免请求的送发者和接收者之间的耦合关系 2. 案例package org.demo.chainofresponsibility.demo;/** * 使多个对象都有机会处理请求, * 从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链, ... 阅读全文
posted @ 2014-06-23 10:03 廖凯林 阅读(251) 评论(0) 推荐(0)
摘要:1. 概念 代理模式又称为委托模式 ;为其他对象提供一种代理以控制对这个对象的访问。2. 案例 package org.demo.proxy.demo01;public class Demo03 { public static void main(String[] args) { ... 阅读全文
posted @ 2014-06-20 18:54 廖凯林 阅读(137) 评论(0) 推荐(0)
摘要:1. 概念 享元模式(FlyWeight),运用共享技术有效的支持大量细粒度的对象2. 案例/********************************************************************** * * FILE : Demo01.java * CLASS... 阅读全文
posted @ 2014-06-20 18:44 廖凯林 阅读(150) 评论(0) 推荐(0)
摘要:1. 概念 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。2 .案例/********************************************************************** * * FILE... 阅读全文
posted @ 2014-06-20 18:29 廖凯林 阅读(135) 评论(0) 推荐(0)