设计模式详解

上传人:xh****66 文档编号:56203968 上传时间:2018-10-10 格式:DOC 页数:160 大小:2.62MB
返回 下载 相关 举报
设计模式详解_第1页
第1页 / 共160页
设计模式详解_第2页
第2页 / 共160页
设计模式详解_第3页
第3页 / 共160页
设计模式详解_第4页
第4页 / 共160页
设计模式详解_第5页
第5页 / 共160页
点击查看更多>>
资源描述

《设计模式详解》由会员分享,可在线阅读,更多相关《设计模式详解(160页珍藏版)》请在金锄头文库上搜索。

1、 目录目录针对接口编程针对接口编程-问世间情为何物问世间情为何物 直教人生死相许直教人生死相许 .3单一职责原则单一职责原则 乔峰乔峰 VS 慕容复慕容复 10开放封闭原则开放封闭原则 孙悟空任弼马温一职孙悟空任弼马温一职17里氏代换原则里氏代换原则 法海捉拿白蛇新解法海捉拿白蛇新解.24迪米特法则迪米特法则 慈禧太后为何不和陌生人说话慈禧太后为何不和陌生人说话29合成聚合复用原则合成聚合复用原则 刘邦刘邦 VS 韩信韩信 .35简单工厂模式简单工厂模式 一见钟情的代价一见钟情的代价 .44工厂方法模式工厂方法模式 让麦当劳的汉堡适合不同让麦当劳的汉堡适合不同 MM 的不同口味的不同口味52抽

2、象工厂模式抽象工厂模式 MM 的生日的生日 .59单例模式单例模式 你是我的唯一你是我的唯一 .69原型模式原型模式 肉麻情话肉麻情话76建造者模式建造者模式 让我们同居吧!让我们同居吧!82装饰模式装饰模式 见见 MM 的家长的家长.87外观模式外观模式 MM 也迷恋炒股?也迷恋炒股? .94享元模式享元模式 短信可以这样发短信可以这样发.99适配器模式适配器模式 笔记本电脑的适配器笔记本电脑的适配器 .105代理模式代理模式 QQ 聊天机器人聊天机器人 .110桥接模式桥接模式 最重要的是有一颗让最重要的是有一颗让 MM 快乐的心快乐的心 .115组合模式组合模式 MM 的生日礼物的生日礼

3、物.121模板方法模式模板方法模式 人的一生应该这样度过人的一生应该这样度过.128观察者模式观察者模式 GG 在在 MM 身边有两个妹妹身边有两个妹妹 134状态模式状态模式 .140策略模式策略模式 .141职责链模式职责链模式154建造者模式 让我们同居吧!装饰模式 见 MM 的家长外观模式 MM 也迷恋炒股?享元模式 短信可以这样发适配器模式 笔记本电脑的适配器代理模式 QQ 聊天机器人桥接模式 最重要的是要有一颗让 MM 快乐 的心组合模式 MM 的生日礼物模板方法模式 人的一生应该这样度过观察者模式 GG 在 MM 身边有两个妹妹状态模式 在一天的不同时间要给 MM 发不通的短信策

4、略模式 帮助 MM 选择商场打折策略职责链模式 帮助 MM 选择商场打折策略统一建模语言 UML 简介和 StarUML 使用针对接口编程针对接口编程-问世间情为何物问世间情为何物 直教人生死相许直教人生死相许 应用场景举例应用场景举例:“十六年后 在此重会;夫妻情深 勿失信约”,悲痛欲绝的杨过跑到断肠崖,看到小龙女亲手留在石壁上的文字,即惊喜又痛苦不欲生:“十六年!为什么要等到十六年?!”。但是信约已定,痴情的杨过也只能等十六年了。离开断肠崖后,杨过一边开始了自己的苦苦的等待与思恋,一边寄情练功,当然开始时 候也忘不了吃那疗伤的草药。后来杨过巧遇了千年神雕,和神雕一见如故,从此便开始修炼独孤

5、求败的武功。无事可做,寄情练剑倒也不失为人生的一大快事。“相思无用,唯别而已。别期若有定,千般煎熬又何如?莫道黯然销魂,何处柳暗花明?!”,惊天地泣鬼神的黯然销魂掌就这样诞生了。时 光飞逝,恍惚间快过了十六年。此时,杨过的神功已成,想象着十六年约期就将来临,心中想象着自己一生的挚爱,不免感慨和激动万分!在祭拜过求败他老人家之后,杨过和神雕一起开始去赴那场长达十六年之久的约会。令众生激动和艳羡。再出江湖的杨过惩奸除恶、帮扶弱小,很快就侠名远播,被人尊称为“神雕侠”。自己心中想象着小龙女过往的一笑一颦,想象着她是怎么度过这十六年的,不禁催生了更加浓烈的相思和相见之情。千呼万唤,终于,这一天来到!断

6、肠崖边,佳人芳踪迹未现,过儿万念俱灰,纵身跳下悬崖幸好悬崖下面是深渊,杨过并没有死,被水冲到了岸边的杨过苏醒过来后,看到了很多小蜜蜂,他一眼就认出了这是小龙女样的蜜蜂,莫非龙儿就在附近?最后在深潭水下,杨过找到了自己苦苦等待了十六年的挚爱。原来小龙女得知自己无药可救,也纵身跳下断肠崖,十六年之期只不过是为了让杨过不要轻生。但是跳崖后的小龙女并没有死掉,接着就在谷底一个世外桃源的地方慢慢的疗伤,竟然完全康复了。真是有情人终成眷属,有情人终成名人。定义:定义: 接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此 这些方法可以在不同的地方被不同的类实现,而这些实

7、现可以具有不同的行为(功能)。 接口是对抽象的抽象。 接口就是标准,就是承诺。 针对接口编程,不要针对具体编程是依赖倒转原则的另外一种表述。 针对接口编程又称为面向接口编程,针对接口编程就是要先设计一系列的接口,把设计和实现分离开,使用时只需引用接口即可,也由于系统各部分的解耦合。如下图所示:故事分析:故事分析: “十六年后 在此重会;夫妻情深 勿失信约”就是针对接口编程的一个绝妙的例子。而且最后还加了“信约”一次。言外之意就是说我们说好了要十六年在此地重逢,我们俩都要遵照此约定。根据上面的故事,小龙女和杨过制定好接口后,就纵身跳下了悬崖,不管自己的过儿了,因为她此时已经不用关心过儿怎么去再十

8、六年后河自己相见,只要十六年后在此地相见即可,也就是说小龙女针对和使用都是接口,至于杨过怎么实现,她此时已经身患绝症而无法顾及了。而杨过看过此约定后,虽然无奈,但也只好照办。具体实现如下:回去吃断肠草调理自己,然后以神雕为伴练习武功,知道练成了黯然销魂掌而神功大成,然后就是在江湖上做侠义之事,然后就是按照信约与十六年后来 到断肠崖边;而小龙女就在谷底慢慢的调养,十六年后身体早已康复,而且越发迷人了。当杨过没有见到小龙女时纵身跳崖,遵照了“问世间情为何物,直教人生死相许”标准。 总结一下:小龙女和杨过定下接口,然后各自针对接口各自独立的做事,最终得以相见。 针对接口编程是未来提高程序的可维护性、

9、可伸缩性和可复用性。如果你在一个类中直接使用另外的一个,这样就把两个类紧密的联系在了一起,以后如果想做出改变就很难了。如果针对接口编程,当业务变化时我们只需要用一个新的类实现接口即可,而客户端依旧可以使用接口引用新的类的,同时也保证了客户端的不变性。这样客户端和实现端互不影响,保持了各自的相对独立性。正如小龙女和杨过的,他们树立了十六年制约后,就不用关心彼此的如何去赴这场约定,只需要按照约定做事就 OK了。互不影响,自由在在。如下图所示:Java 代码实现:代码实现: 新建一个“信约”的接口,这个接口是杨过和小龙女都必须通过自己的方式实现的。代码如下:package com.diermeng.

10、designPattern.dating;/* 杨过和小龙女定下的约定接口*/public interface Dating /* 约定的接口*/public void dating(); 然后分别建立杨过和小龙女的实现类,分别实现上面的接口。代码依次如下:package com.diermeng.designPattern.dating.impl;import com.diermeng.designPattern.dating.Dating;/* 杨过对接口的实现*/public class Yangguo implements Dating /* 姓名*/String name;/* 默认

11、空构造方法*/public Yangguo()/* 传入 name 参数的构造方法*/public Yangguo(String name) this.name = name;public String getName() return name;public void setName(String name) this.name = name;/* (non-Javadoc)* see com.diermeng.dating.inter.Dating#dating()* 杨过对约定的实现*/public void dating() if(this.getName()!=null)System

12、.out.println(this.getName()+“ : “+“十六年后 在此重会;夫妻情深 勿失信约“);elseSystem.out.println(“十六年后 在此重会;夫妻情深 勿失信约“);package com.diermeng.designPattern.dating.impl;import com.diermeng.designPattern.dating.Dating;/* 小龙女对接口的实现*/public class XiaoLongnv implements Dating/* 姓名*/String name;/* 默认空构造方法*/public XiaoLongn

13、v()/* 传入 name 参数的构造方法*/public XiaoLongnv(String name) this.name = name;public String getName() return name;public void setName(String name) this.name = name;/* (non-Javadoc)* see com.diermeng.dating.inter.Dating#dating()* 小龙女对约定的实现*/public void dating() if(this.getName()!=null)System.out.println(thi

14、s.getName()+“ : “+“十六年后 在此重会;夫妻情深 勿失信约“);elseSystem.out.println(“十六年后 在此重会;夫妻情深 勿失信约“);建立一个测试类,代码如下:package com.diermeng.designPattern.dating.client;import com.diermeng.designPattern.dating.Dating;import com.diermeng.designPattern.dating.impl.XiaoLongnv;import com.diermeng.designPattern.dating.impl.

15、Yangguo;/* 对杨过和小龙女约定进行测试的客户端*/public class DatingTest public static void main(String args)/分别实例化实例化Dating yangguo = new Yangguo(“过儿“);Dating xiaoLongnv = new XiaoLongnv(“龙儿“);/调用各自的方法yangguo.dating();xiaoLongnv.dating();程序运行结果如下:过儿 : 十六年后 在此重会;夫妻情深 勿失信约龙儿 : 十六年后 在此重会;夫妻情深 勿失信约 已有应用简介:已有应用简介: Java 是相

16、面对象编程的语言,而面向对象编程的核心之一就是要针对针对接口编程、不要针对实现编程,在 Java API 中的标志接口 java.io.Serializable 和java.rmi.Remote 等就是我们经常遇到的,下面以 java.io.Serializable 为例说明一下,源代码如下:package java.io;public interface SerializableUML 图形如下图所示:当然在 J2EE 框架的使用中到处都是针对接口编程的身影。例如在 中几乎每一处都是针对接口编程的,令人印象非常深刻的一点就是巴巴运动网把对数据库的 CRUD 等基本操作封装在了一个统一接口中,这给以后的代码

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号