设计模式总结
这篇文章主要是在看过设计模式的基础上去理解常见设计模式。码字不易,还请点波关注。
文章目录
创建类模式
创建类模式包括工厂方法模式、建造者模式、抽象工厂模式、单例模式和原型模式,它们都能够提供对象的创建和管理职责;
其中单例模式和原型模式比较容易理解,单例模式是要保持在内存中只有一个对象,原型模式是要求通过复制的方式产生一个新的对象。。
工厂方法模式VS建造者模式
工厂方法模式注重的是整体对象的创建方法;
建造者模式注重的是部件构建的过程,旨在通过一步一步地精确构造创建出一个复杂的对象。
如要制造一辆车,如果使用工厂模式,直接产生出来的就是一辆宝马车、奔驰车,但是如果使用建造者模式,我们可以组装出一辆奔驰的引擎,宝马的轮胎…我们可以自己定制。
抽象工厂模式VS建造者模式
抽象工厂模式实现对产品家族的创建,一个产品家族是这样的一系列产品:具有不同分类维度的产品组合,采用抽象工厂模式则是不需要关心构建过程,只关心什么产品由什么工厂生产即可。
建造者模式则是要求按照指定的蓝图建造产品,它的主要目的是通过组装零配件而产生一个新产品。
可以把抽象工厂看作一个汽车工厂,汽车工厂下面又有生产宝马的工厂(工厂模式)和生产奔驰的工厂。
而建造者模式相当于一个工厂里有生产不同零件的车间,最后将零件组装得到了一辆车。
工厂模式更注重的是结果,建造者模式更注重的是细节。
结构类模式
结构类模式包括适配器模式、桥梁模式、组合模式、装饰模式、门面模式、享元模式和代理模式。它们都是通过组合类或对象产生更大结构以适应更高层次的逻辑需求。
代理模式VS装饰者模式
装饰模式就是代理模式的一个特殊应用;
两者的共同点是都具有相同的接口,不同点则是代理模式着重对代理过程的控制,而装饰模式则是对类的功能进行加强或减弱,它着重类的功能变化;
如明星都有一个经纪人,这个经纪人就是明星的代理,对外我们只能联系经纪人,然后由他来判断具不具备找明星的资格,如果有资格就会让明星来处理。
而装饰者模式注重的是功能的加强,如一个声音不太好听,但是现在科技的发达,变声器的到来,变声器对声音进行装饰,使得声音变得特别好听,这就是一种加强。
适配器模式
适配器模式的主要意图是接口转换,把一个对象的接口转换成系统希望的另外一个接口,比如通过接口转换可以屏蔽外界接口,以免外界接口深入系统内部,从而提高系统的稳定性和可靠性;
如,我们都知道安卓手机的充电接口和苹果手机的充电接口不同,现在有个需求要用安卓充电器给苹果手机的充电,那么我们就可以通过提供一个接口转接器来实现,这个其实就是适配器。
桥梁模式
桥梁模式是在抽象层产生耦合,解决的是自行扩展的问题,它可以使两个有耦合关系的对象互不影响地扩展。
如对于使用笔画图这样的需求,可以采用桥梁模式设计成用什么笔(铅笔、毛笔)画什么图(圆形、方形)的方案,至于以后需求的变更,如增加笔的类型,增加图形等;
门面模式
门面模式是一个粗粒度的封装,它提供一个方便访问子系统的接口,不具有任何的业务逻辑,仅仅是一个访问复杂系统的快速通道,没有它,子系统照样运行,有了它,只是更方便访问而已。
行为类模式
行为类模式包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式。
命令模式VS策略模式
命令模式和策略模式的类图确实很相似,只是命令模式多了一个接收者(Receiver)角色。但是两者的区别还是很明显的。
策略模式的意图是封装算法,它认为“算法”已经是一个完整的、不可拆分的原子业务,即其意图是让这些算法独立,并且可以相互替换。
命令模式则是对动作的解耦,把一个动作的执行分为执行对象(接收者角色)、执行行为(命令角色),让两者相互独立而不相互影响。
策略模式VS状态模式
策略模式封装的是不同的算法,算法之间没有交互,以达到算法可以自由切换的目的;
状态模式封装的是不同的状态,以达到状态切换行为随之发生改变的目的。
如人只要生下来就有工作可做,人在孩童时期的主要工作就是玩耍;成人时期的主要工作是养活自己,然后为社会做贡献;老年时期的主要工作就是享受天伦之乐。
按照策略模式来分析,这三种不同的工作方式就是三个不同的具体算法,随着时光的推移工作内容随之更替;
而按照状态模式进行设计,则认为人的状态(孩童、成人、老人)产生了不同的行为结果,这里的行为都相同,都是工作,但是状态之间是有联系的,孩童状态后面紧接着就是成人状态,成人状态后是老人状态,有一种切换的关系,但是相对于策略模式封装的则是相互独立的东西,可以直接替换。
观察者模式
观察者模式还是比较好理解,被观察者发生了什么变化,就需要去通知观察者做出相应的处理。
责任链模式
责任链模式就是将一个消息在这个链上进行传递,如果当前节点有权处理这个消息则处理,如果处理不了,则往下一个节点进行传递,直至处理不了。
如我们在学校找老师签字,最先找的肯定是班主任,当班主任收到这个请求后,在他的职责范围内,就给签了,但是如果超过了,他就会把这个请求扔给院长,直至校长,最后在有校长将签好字的给院长,院长给班主任,班主任给到学生,这个就是一个责任链模式。
中介者模式
用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
如一个公司各个部门之间的交流,每个部门都可能和一直多个部门交流,那么这样就会导致关系网非常复杂,那么就可以加入一个中介者的角色,每个部门都只和中介者交流,由中介者和对应的部门交流,这就达到了各个部门之间的解耦,需要和其他部门交流,只需要和中介者讲,其他的不用管。
看完了一遍设计模式的书,但是想要真正掌握设计模式,这是远远不够的,需要不断的去实践,多思考。
最近在项目第一使用上了设计模式,对工单进行优化,每类工单总体的处理流程是一样的,但是在具体的细节上不一样,所以使用了模板方法模式来设计,对整体的流程进行抽象,对具体的细节由子类去实现。