随笔分类 -  23设计模式

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