编辑: NaluLee | 2019-08-31 |
2009 年5月? ? ? ? 我希望这本书的阅读者具备最基本的代码编写能力,您是一个初级的 coder,可以从中领会到怎么设计 一段优秀的代码;
您是一个高级程序员,可以从中全面了解到设计模式以及 Java 的边角技术的使用;
您是 一个顶级的系统分析师,可以从中获得共鸣,寻找到项目公共问题的解决办法,呀,是不是把牛吹大了?!? 您的设计模式? ? 目? ? ? ? 录? ? 第? 1? 章? 策略模式【STRATEGY?PATTERN】4? 第? 2? 章? 代理模式【PROXY?PATTERN】8? 第? 3? 章? 单例模式【SINGLETON?PATTERN】12? 第? 4? 章? 多例模式【MULTITION?PATTERN】16? 第? 5? 章? 工厂方法模式【FACTORY?METHOD?PATTERN】19? 第? 6? 章? 抽象工厂模式【ABSTRACT?FACTORY?PATTERN】31? 第? 7? 章? 门面模式【FACADE?PATTERN】? 44? 第? 8? 章? 适配器模式【ADAPTER?PATTERN】 51? 第? 9? 章? 模板方法模式【TEMPLATE?METHOD?PATTERN】63? 第? 10? 章? 建造者模式【BUILDER?PATTERN】82? 第? 11? 章? 桥梁模式【BRIDGE?PATTERN】 97? 第? 12? 章? 命令模式【COMMAND?PATTERN】112? 第? 13? 章? 装饰模式【DECORATOR?PATTERN】126? 第? 14? 章? 迭代器模式【ITERATOR?PATTERN】137? 第? 15? 章? 组合模式【COMPOSITE?PATTERN】147? 第? 16? 章? 观察者模式【OBSERVER?PATTERN】175? 第? 17? 章? 责任链模式【CHAIN?OF?RESPONSIBILITY?PATTERN】194? 第? 18? 章? 访问者模式【VISITOR?PATTERN】210? 第? 19? 章? 状态模式【STATE?PATTERN】236? 第? 20? 章? 原型模式【PROTOTYPE?PATTERN】255? 第? 21? 章? 中介者模式【MEDIATOR?PATTERN】256? 第? 22? 章? 解释器模式【INTERPRETER?PATTERN】257? 第? 23? 章? 亨元模式【FLYWEIGHT?PATTERN】258? 第? 24? 章? 备忘录模式【MEMENTO?PATTERN】259? 第? 25? 章? 模式大PK.
260? 第? 26? 章? 六大设计原则?261? 26.1? 单一职责原则【SINGLE?RESPONSIBILITY?PRINCIPLE】261? 26.2? 里氏替换原则【LISKOV?SUBSTITUTION?PRINCIPLE】268? ? ? 第? ? 2? ? 页? 您的设计模式? 26.3? 依赖倒置原则【DEPENDENCE?INVERSION?PRINCIPLE】280? 26.4? 接口隔离原则【INTERFACE?SEGREGATION?PRINCIPLE】281? 26.5? 迪米特法则【LOW?OF?DEMETER】282? 26.6? 开闭原则【OPEN?CLOSE?PRINCIPLE】292? 第? 27? 章? 混编模式讲解?294? 第? 28? 章? 更新记录:296? 相关说明?297? 相关说明?297? 第? 29? 章? 后序?298? ? ? 第? ? 3? ? 页? 您的设计模式? 第?1?章 策略模式【Strategy?Pattern】? 刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题, 嘿,还别说,真是解决了大问题,搞到最后是周瑜陪了夫人又折兵呀,那咱们先看看这个场景是什么样子 的. 先说这个场景中的要素:三个妙计,一个锦囊,一个赵云,妙计是小亮同志给的,妙计是放置在锦囊 里,俗称就是锦囊妙计嘛,那赵云就是一个干活的人,从锦囊中取出妙计,执行,然后获胜,用JAVA 程序 怎么表现这个呢?我们先看类图: ? 三个妙计是同一类型的东东,那咱就写个接口: package com.cbf4life.strategy;
/** * @author cbf4Life [email protected] * I'
m glad to share my knowledge with you all. * 首先定一个策略接口,这是诸葛亮老人家给赵云的三个锦囊妙计的接口 * */ public interface IStrategy { //每个锦囊妙计都是一个可执行的算法 public void operate();
} 第? ? 4? ? 页? 您的设计模式? 然后再写三个实现类,有三个妙计嘛: package com.cbf4life.strategy;
/** * @author cbf4Life [email protected] * I'
m glad to share my knowledge with you all. * 找乔国老帮忙,使孙权不能杀刘备 */ public class BackDoor implements IStrategy { public void operate() { System.out.println( 找乔国老帮忙,让吴国太给孙权施加压力 );
} } ? package com.cbf4life.strategy;
/** * @author cbf4Life [email protected] * I'
m glad to share my knowledge with you all. * 求吴国太开个绿灯 */ public class GivenGreenLight implements IStrategy { public void operate() { System.out.println( 求吴国太开个绿灯,放行! );
} } ? package com.cbf4life.strategy;
/** * @author cbf4Life [email protected] * I'
m glad to share my knowledge with you all. * 孙夫人断后,挡住追兵 */ public class BlockEnemy implements IStrategy { public void operate() { 第? ? 5? ? 页? 您的设计模式? System.out.println( 孙夫人断后,挡住追兵 );
} } ? 好了,大家看看,三个妙计是有了,那需要有个地方放这些妙计呀,放锦囊呀: ? package com.cbf4life.strategy;
/** * @author cbf4Life [email protected] * I'
m glad to share my knowledge with you all. * 计谋有了,那还要有锦囊 */ public class Context { //构造函数,你要使用那个妙计 private IStrategy straegy;
public Context(IStrategy strategy){ this.straegy = strategy;
} //使用计谋了,看我出招了 public void operate(){ this.straegy.operate();
} } ? 然后就是赵云雄赳赳的揣着三个锦囊,拉着已步入老年行列的、还想着娶纯情少女的、色迷迷的刘老 爷子去入赘了,嗨,还别说,小亮的三个妙计还真是不错,瞅瞅: ? package com.cbf4life.strategy;
/** * @author cbf4Life [email protected] * I'
m glad to share my knowledge with you all. */ public class ZhaoYun { /** * 赵云出场了,他根据诸葛亮给他的交代,依次拆开妙计 */ public static void main(String[] args) { Context context;
第? ? 6? ? 页? 您的设计模式? //刚刚到吴国的时候拆第一个 System.out.println(刚刚到吴国的时候拆第一个- context = new Context(new BackDoor());
//拿到妙计 context.operate();
//拆开执行 System.out.println( nnnnnnnn );
//刘备乐不思蜀了,拆第二个了 System.out.println(刘备乐不思蜀了,拆第二个了- context = new Context(new GivenGreenLight());
context.operate();
//执行了第二个锦囊了 System.out.println( nnnnnnnn );
//孙权的小兵追了,咋办?拆第三个 System.out.println(孙权的小兵追了,咋办?拆第三个 context = new Context(new BlockEnemy());
context.operate();
//孙夫人退兵 System.out.println( nnnnnnnn );
/* *问题来了:赵云实际不知道是那个策略呀,他只知道拆第一个锦囊, *而不知道是BackDoor这个妙计,咋办? 似乎这个策略模式已经把计谋名称写出来了 * * 错! BackDoor、 GivenGreenLight、 BlockEnemy只是一个代码, 你写成first、 second、 third,没人会说你错! * * 策略模式的好处就是:体现了高内聚低耦合的特性呀,缺点嘛,这个那个,我回去再查查 */ } } ? 就这三招,搞的周郎是 陪了夫人又折兵 呀!这就是策略模式,高内聚低耦合的特点也表现出来了, 还有一个就是扩展性,也就是 OCP 原则,策略类可以继续增加下去,只要修改 Context.java 就可以了,这 个不多说了,自己领会吧.? 第? ? 7? ? 页? 您的设计模式? 第?2?章 代理模式【Proxy?Pattern】? 什么是代理模式呢?我很忙,忙的没........