随笔分类 - 23设计模式
摘要:由于解释器模式基本不用,我就直接转载网上的了,大家看看涨涨姿势http://blog.csdn.net/ylchou/article/details/7594135 一、引子 其实没有什么好的例子引入解释器模式,因为它描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发编译器中;在实际
阅读全文
摘要:/** * 中介者模式 * @author TMAC-J * 研究了这么多设计模式,觉得无非就是几点: * 1.若两个类有耦合关系,设立一个中间类,处理两个类的关系,把两个类的耦合降低 * 2.面向接口 * 3.在设计时就应当想到如果以后有修改,不要去修改原有类,而要设计成能新添加类去做新功能的架构 * 中介者模式用于两个相互通信的类,相当于一个中间层 * 这里模拟A变量始终是B...
阅读全文
摘要:/** * 访问者模式 * @author TMAC-J * 在客户端和元素之间添加一个访问者 * 当你需要添加一些和元素关系不大的需求时,可以直接放在访问者里面 * 或者是元素之间有一些公共的代码块,你可以把它放在访问者里面,就不用写重复代码了 * 适用于元素数据基本不变,操作不断变化的场景 * 可以不改变元素类,只改变访问者类,个人觉得这个访问者类相当于一个管理器 * 和迭代...
阅读全文
摘要:/** * 状态模式 * @author TMAC-J * 状态模式和策略模式很像,其实仔细研究发现完全不一样 * 策略模式各策略之间没有任何关系,独立的 * 状态模式各状态之间接口方法都是一样的 * 另外一个区别是状态模式主要用于状态经常发生改变的情况 * 策略模式发生在不改变的情况,策略模式一般在CONTEXT初始化时就决定了,并且中途不会改变 * 换句话说,策略模式只是在对...
阅读全文
摘要:/** * 备忘录模式 * @author TMAC-J * 用于存储bean的状态 */ public class MementoPattern { public class Memento{ private int lifeValue; private int grade; pub...
阅读全文
摘要:/** * 命令模式 * @author TMAC-J * 将调用者和接受者分离 * 可以将一组命令组合在一起,适合很多命令的时候 */ public class CommandPattern { interface Command{ void excute(); } public class TVReceiver{ ...
阅读全文
摘要:/** * 责任链模式 * @author TMAC-J * 老板讲任务交给CTO,CTO自然不会亲自去做,又把人物分配给项目经理,项目经理再把任务分配给组长,组长再分配给个人 * 如果中途哪个环节出现了问题,比如项目经理请假了,组长直接接上,使得项目更加灵活 */ public class ResponsibleChain { abstract class Hand...
阅读全文
摘要:/** * 迭代子模式 * @author TMAC-J * 聚合:某一类对象的集合 * 迭代:行为方式,用来处理聚合 * 是一种行为模式,用于将聚合本身和操作聚合的行为分离 * Java中的COLLECT就是一种聚合,Iterator类是一种迭代 * 好处:分开了行为和本身,便于行为的扩展和本身的维护,符合开闭原则 * 分为白盒(宽接口)和黑盒(窄接口) * 白盒:白盒提供了...
阅读全文
摘要:import java.util.ArrayList; import java.util.List; /** * 观察者模式 * @author TMAC-J * 牵一发而动全身来形容观察者模式在合适不过了 * 分为拉模式和推模式,这里不详细说了 */ public class ObserverPattern { interface IObserved{ ...
阅读全文
摘要:/** * 模块模式 * @author TMAC-J * 将一个完整的算法分离,分成不同的模块 * 用于有很多步骤的时候,可能以后这些步骤还会增加,把这些步骤分离 * 将有共性的部分放在抽象类中 * 避免代码重复 * 有利于算法扩展 * 假设这个算法是人,人具有的共性是早上起来穿衣服,吃饭,工作 */ public class TemplateMethod { ...
阅读全文
摘要:/** * 策略模式 * @author TMAC-J * 根据环境的不同选择不同的策略,把策略用接口抽象出来 */ public class StrategyPattern { interface Strategy{ void operate(); } public class StrategyA implements Str...
阅读全文
摘要:import java.util.Hashtable; /** * 享元模式 * @author TMAC-J * 享元模式一般和工厂模式一起使用,但此处为了更好说明,只用享元模式 * 定义:享元模式针对于是一种以时间来切换空间的方式,其公用同一实例,线程池,string都是其应用 */ public class FlyweightPattern { public...
阅读全文
摘要:import java.util.LinkedList; /** * 组合模式 * * @author TMAC-J 主要用于树状结构,用于部分和整体区别无区别的场景 想象一下,假设有一批连锁的理发店,你到每个店去理发都是等同的 * 那么假设不用组合模式,你到10家店理发,你需要知道这10家店或者是知道他们的父类店 * 然后new10次来统计消费情况...
阅读全文
摘要:/** * 桥接模式 * @author TMAC-J * 应用于多维度方案 * 用组合的形式代替继承 * 符合单一职责原则 * 一个类只有一个引起他变化的原因 * 增加程序灵活性 */ public class BridgePattern { abstract class Road{ Car car; void run(){};...
阅读全文
摘要:/** * 外观模式(门面模式) * @author TMAC-J * 外观模式是通过访问一个前台来实现对子系统的访问,其和代理模式的区别是 * 代理模式是通过代理一个类的形式,也就是说一对一的关系 * 而外观模式是通过访问一个前台来对子系统(多个类)的访问,一对多 * 以下的例子中A、B、C都是子系统中的类 */ public class FacadePattern { p...
阅读全文
摘要:装饰者模式的关注点在于添加功能 代理模式的关注点在于控制对象的访问,其原型对象对于用户无法得知 适配器模式关注点在于适配,从定义上看装饰模式是对核心对象或者功能的扩展,适配器模式是把对象或者功能放到一个新对象中引用。举个例子,现在书城卖道德经的书,有线装版,有精装版,有日文版,有英文版,其中线装版和
阅读全文
摘要:/** * 装饰者模式 * @author TMAC-J * 总的来说,装饰者模式就是继承的应用 */ public class DecoratorPattern { interface Beans{ void doSomething(); } public class MyBean implements Beans{ @Override public void...
阅读全文
摘要:public class Adaptee{ public void doSomething(){ System.out.println("doSomething..."); } } interface Target{ void doOtherSomething(); } public class A
阅读全文
摘要:/** * * @author TMAC-J * 原型模式,可以说是简化的工厂模式 * 与工厂模式的区别是工厂模式可以生产很多的产品,而原型模式仅仅是复制而已 * 这里有一个问题:深克隆和潜克隆的问题(深克隆是包括克隆实例里面的引用,而浅克隆不克隆,而是指向和原型一样的引用) */ public class PrototypePattern { interface IProt...
阅读全文
摘要:/** * 建造者模式 * 主要用于构造复杂的对象 * 在优朋播放器就是采用建造者构建的,可以说比较有心得吧 * @author TMAC-J * */ public class BuilderPattern { /** * 要构建的对象bean * @author voole * */ public class Person{ private Stri...
阅读全文

浙公网安备 33010602011771号