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


运行结果:
这里的代理类必须要持要实现原接口和持有原接口的对象,才能称之为代理类 。
这样,我们不需要修改原先的实现类,用一个代理类来进行过滤 。有些人可能有这样的疑惑,为什么不直接在原实现类中修改,记住JAVA设计模式的基本原则,对内关闭修改 。
假如你并没有对方的类,别人只是提供给你这样一个可以操作的JAR包你如何去做?把JAR包反编译,再修改?又假如某些地方可以直接调用原有接口,你如果修改原有的实现类,岂不是对其他的地方也造成了影响?不能修改原有代码这是基本原则 。
最后,就是装饰器模式,装饰器模式与相对于上面2种模式更好理解,差别也最大 。
假如说,现在这个延长订单,不光可以延长订单提货有效期,可以延长订单的退货有效期 。
这就是一个典型的装饰器,你需要做的是丰富原接口的功能,并且不改动原先的接口 。
[java]
publicclassNewSourceOrderApiImplimplementsSourceOrderApi{SourceOrderApisourceOrderApi;publicNewSourceOrderApiImpl(SourceOrderApisourceOrderApi){this.sourceOrderApi=sourceOrderApi;}@OverridepublicvoidupdateDate(StringorderId,Stringdate,Stringclient){sourceOrderApi.updateDate(orderId,date,client);System.out.println(client+"已将订单"+orderId+"的退款期延长至"+date);}}
main方法:
[java]
publicclassTest{publicstaticvoidmain(String[]args){SourceOrderApisourceOrderApi=newNewSourceOrderApiImpl(newSourceOrderApiImpl());sourceOrderApi.updateDate("123456","2014-10-15","user");}}
运行结果:
在装饰器模式中,必须要有被装饰的类和装饰的类 。。在这套代码中,原先SourceOrderApi的对象就是被装饰的类,而新建NewSourceOrderApiImpl 就是装饰类代理器,装饰类必须把被装饰的对象当作参数传入 。
这就是和代理模式的代码不同之处,代理模式一定是自身持有这个对象,不需要从外部传入 。而装饰模式的一定是从外部传入,并且可以没有顺序,按照代码的实际需求随意挑换顺序,就如你吃火锅先放白菜还是先放丸子都可以 。
再从使用上来看,代理模式注重的是隔离限制,让外部不能访问你实际的调用对象,比如权限控制,装饰模式注重的是功能的拓展,在同一个方法下实现更多的功能 。
啰啰嗦嗦一大篇文章,大概是把这三种模式好好的整理一下,个人本身也是彻底理解了这三种模式 。
现在可以安心的进入下一个环节学习了 。。。
匆匆拙笔,如有疏漏错误,敬请指出


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

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