适配器模式,装饰模式,代理模式异同

节前把3个设计模式的学习心得分享了一下,分别是适配器模式,装饰模式,代理模式 。
但是似乎越写越有些迷糊,这三种模式都有着一些大同小异的地方,总是有些搞不清 。
今天再重新学习下,把学习心得分享给大家一下 。这次是结合的我工作中的实际项目 。
设计模式,其实是一种解决方法,Java作为一种面向对象的语言,对于所有的设计模式在实现上,总是少不了对接口的实现,对抽象类的继承,有时候似乎是为了去实现接口而去写接口,所以在这三种模式的说明代码中,我们都定义了接口这些东西,所以才有了现在的混淆 。
先不厌其烦的介绍下这三种的设计模式的概念吧 。
适配器模式,一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中 。
装饰器模式,原有的不能满足现有的需求,对原有的进行增强 。
代理模式,同一个类而去调用另一个类的方法,不对这个方法进行直接操作 。
适配器的特点在于兼容,从代码上的特点来说,适配类与原有的类具有相同的接口,并且持有新的目标对象 。
就如同一个三孔转2孔的适配器一样,他有三孔的插头,可以插到三孔插座里,又有两孔的插座可以被2孔插头插入 。
适配器模式是在于对原有3孔的改造 。
在使用适配器模式的时候,我们必须同时持有原对象,适配对象,目标对象 。。。。
装饰器模式特点在于增强,他的特点是被装饰类和所有的装饰类必须实现同一个接口,而且必须持有被装饰的对象,可以无限装饰 。
代理模式的特点在于隔离,隔离调用类和被调用类的关系,通过一个代理类去调用 。
总的来说就是如下三句话:
1 适配器模式是将一个类(a)通过某种方式转换成另一个类(b).
2 装饰模式是在一个原有类(a)的基础之上增加了某些新的功能变成另一个类(b).
3 代理模式是将一个类(a)转换成具体的操作类(b).
又是罗里吧嗦一大段话,然后我们开心的来到了举例时间,这次举的是工作中实际的例子 。
先简单介绍一下,公司有一个ORDER系统,专门用于提供订单管理的接口,提供给O2O商城,WAP商城,手机类APP,微信等客户端调用 。
ORDER系统在上线之时,已经包含了非常完整的数据操作 。
现手机类APP需要升级,老的接口可能不能满足需求,如原O2O订单提货延长有效期接口需要提供截至时间和订单号,新APP可能不提供截至时间,只需要 提供订单号即可延长时间 。
而老的接口又不能修改,因为老的order接口是针对所有平台的,那么必须将新接口要求与原接口进行适配 。。。
解决方案如下:新增AppAdepter类,用来适配老的接口,同时开发给新的接口 。。。。
先给出原接口和实现类
原接口:
【适配器模式,装饰模式,代理模式异同】[java]
/***原接口,需要传入orderId,时间**/publicinterfaceSourceOrderApi{publicvoidupdateDate(StringorderId,Stringdate,Stringclient);}
实现类:
[java]
publicclassSourceOrderApiImplimplementsSourceOrderApi{@OverridepublicvoidupdateDate(StringorderId,Stringdate,Stringclient){System.out.println(client+"已将订单"+orderId+"的有效期延长至"+date);}}
在这套代码中,对于客户端来说需要传入orderId 和 有效期date 和客户端名字才能延长 。。。
Main方法:
[java]
publicclassTest{publicstaticvoidmain(String[]args){SourceOrderApisourceOrderApi=newSourceOrderApiImpl();sourceOrderApi.updateDate("123456","2014-10-15","user");}}
运行结果:


以上关于本文的内容,仅作参考!温馨提示:如遇专业性较强的问题(如:疾病、健康、理财等),还请咨询专业人士给予相关指导!

「辽宁龙网」www.liaoninglong.com小编还为您精选了以下内容,希望对您有所帮助: