23种设计模式以及设计原则(二)
来源:互联网 发布:黑暗之魂2网络延迟 编辑:程序博客网 时间:2024/05/06 23:07
1.门面模式
门面模式说白了就是封装了一个类,而此类的作用是按顺序执行方法。调用者无需知道具体流程,只需要将要传递的参数传给该类,这样该类就按顺序执行就好了,符合高扩展性以及高内聚低耦合的原则。
例如写信,顺序是先写内容、写信封、把信放到信封里、最后邮递出去,而且顺序不能颠倒(如果你非要较真说我先写信封后写内容,那万一要是之前给前女友写的信封被现女友看到了呢?哎,不说了,想想膝盖就疼)。如果正常实现的话我需要知道这个顺序,按顺序依次调用。而实现了门面模式就很好的进行了封装,我只需要传递给门面类我要写的内容以及地址就好。而且一旦警察叔叔要进行检查,我也不需要每次调用的时候都增加调用检查的方法,只需要在封装的类进行调用就好,当然我也不关心(检查就检呗,反正都是你爱我、我爱你之类的)。
2.适配器模式
适配器这个词一定很熟悉吧,就是电脑连接电源的“黑匣子”(一想到黑匣子,最近的马航,哎不多说了,愿逝者安息),无论你是在天朝还是在岛国,适配器都会把不同电压转成你想要的36V。在介绍这个设计模式之前都需要说明一下,此设计模式并非设计程序时需要考虑的,而是一种补救措施,什么时候需要补救呢?那么我就接下来说明一下吧。
每个管理系统中一般存在用户的这一个实体类(bean)。一开始的时候,我们应用的系统中实体类是这样的:
public class PersonBean {// 名字:张三李四王二麻子private String name;// 性别:用101表示女,111表示男(我倒觉得用010表示男更形象,而且正好互补嘛,都懂得,不要喷我,哎,有本事你别...)private String sex;// phone:iphone/Xiaomi(话说最近小米要改红米note的营销方式,被其他公司各种鄙视) private String phone;// set,get方法省略...}
突然有一天,我这个系统要和另一个系统融合一下,结果另一家公司的实体是这样的:
public class AnotherBean {// 人家非用map存储基本信息private Map baseInfo;// set,get方法省略...}
别说他们的设计好不好,反正人家就这么实现的,那怎么办?首先系统之间的传输使用 RMI(Remote Method Invocation,远程对象调用)的方式,(具体怎么回事问百大爷噢),然后那就想办法把两个实体进行糅合吧。好,我们的主角登场,就是使用适配器模式,我们定义一个AnotherBean的接口,然后定义一个适配器的类AdapterBean,继承咱们原来的Person类,然后实现这个接口,(当然,你要把所有的AnotherBean的实现你都得在写一遍,谁让java不支持多继承呢?不过看jdk8貌似支持接口中存在实现好的方法了,我看了一下,搞得java一点都不像java了,感觉有点c的方式了,既存在 -> ,又存在 :: ,不好意思,跑题了)。现在对原来系统中实现Bean的方式进行一下比较。
原来:PersonBean person = new PersonBean(); 使用适配器设计模式后:PersonBean person = new AdapterBean();
这样在原系统中,除此之外什么都不需要修改,是不是很方便呢?
3.模板方法模式
模板模式,听上去很神奇,其实大家一直都在用,而且没什么难度。比如我们定义一个abstract父类,(如果你不知道abstract是神马东东,那你可以去面壁思过了),然后定义一些共通的方法,针对不同的子类进行不同的实现,调用之后就会出现完全不同的结果。
对于这个模式我不想多说,但是我突然想到一个问题:如果面试问你,private的方法在其他类可以调用吗?最好的回答不是不能就结束了,而是不能,但是反射可以,而且强烈不建议调用,除非你做的是框架。
4.建造者模式
建造者模式和工厂模式非常相似,记住一点你就可以游刃有余的使用了:建造者模式最主要功能是基本方法的调用顺序安排,也就是这些基本方法已经实现了;而工厂方法则重点是创建,你要什么对象我创造一个对象出来,组装顺序则不是他关心的。
建造者模式使用的场景,一是产品类非常的复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式是非常合适,我曾在一个银行交易类项目中遇到了这个问题,一个产品的定价计算模型有 N 多种,每个模型有固定的计算步骤,计算非常复杂,项目中就使用了建造者模式;二是“ 在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不易得到”,这个是我没有遇到过的,创建过程中不易得到?那为什么在设计阶段不修正这个问题,创建的时候都不易得到耶!
总结自《您的设计模式》,下载地址:http://download.csdn.net/detail/u012841509/7110901,上传人都是我,是不是很邪恶呢?骗点分好让自己能下载别人的东西嘛!方便你的同时也方便方便我,嘿嘿~
1 0
- 23种设计模式以及设计原则(二)
- 23种设计模式以及设计原则(一)
- 23种设计模式图片以及设计模式六大原则
- 设计模式(二)六大设计原则
- 设计模式之设计原则(二)
- [设计模式]学习设计模式之二(原则1)
- 二十四种设计模式、七大原则
- 设计模式7大原则(二)
- 设计模式(二)----四大原则
- 【设计模式】之六大原则(二)
- 设计模式之六大原则(二)
- 设计模式(二):六大原则
- 【设计模式】-原则总结(二)
- DesignPatternPrinciple(设计模式原则)二
- JAVA23种设计模式小结以及设计原则归纳
- 设计模式学习之设计模式原则(二):依赖倒置原则和接口隔离原则
- [设计模式]23种设计模式分类和设计原则
- 设计模式六大原则之(二)---里氏替换原则
- WinCE平台NKDbgPrintfW等支持的格式符及浮点数打印方法
- xcode5 cocos2d-x (三) CCSprite 精灵类的常见创建方法
- 心脏支架手术后还是胸闷气短,八一八我支架手术后的苦逼生活
- 使用SQL*PLUS,构建完美excel或html输出
- Java NIO框架Netty教程(一) – Hello Netty
- 23种设计模式以及设计原则(二)
- Python中enumerate用法
- 使用JOTM实现分布式事物管理(多个数据源)
- Python列表推导式——轻量级循环
- Java NIO框架Netty教程(二) – 白话概念
- 对MySQL DELETE语法的详细解析
- Android Sensor感应器介绍(三)Sensor类介绍
- in与exist , not in与not exist 的区别
- angular $log