记录java设计模式中适配器模式和装饰器模式和代理模式的区别

这三种模式也不是第一次见了,但是看过之后就忘记了,傻傻分不清楚,今天就来好好的理一理其中的区别!

1.适配器模式

首先是适配器的模式的解释,将一个类的接口转换成用户期望的另一个接口,适配器模式使得原本不能一起工作的类可以一同工作,说白了就是使得目标接口的方法经过适配之后,可以完成原本不具备的能力。

网上给出的应用模型大体都是什么转接头啊,type-c转vga接口等等的例子,这种例子虽然非常的形象,但是我本人看到这个例子,很难将这个模式应用到实际的代码中去。后来在学习java io包的源码的时候,意外的看到了这种模式的实际应用,大家可以去看一下io包中的InputStreamReader类,在这个类的编写中就用到了神奇的适配器模式,这个类这里就不再详细说了,官方说这个类是字节流通向字符流的桥梁,其实按照适配器模式中的角色来看,他就是一个适配器,使得InputStream和Reader这两个接口可以一同工作!具体不在展开,这里想说的是,适配器模式和装饰器模式以及代理模式是最容易区分的,因为适配器模式中一般是会有两个接口,目的是让让两个接口协同工作,而装饰器模式和代理模式则是单个接口,从这一点就可以区分了!

2.装饰器模式和代理模式

装饰器模式和代理模式在我看来其实真的是非常非常的类似,有时候你混着用都说不出什么问题来!

装饰器模式是目标类和装饰类都实现了同一个接口,然后装饰器里面持有了目标类的引用,这样就可以对目标类的功能进行扩展了,扩展也是装饰器的核心思想。

代理模式,在最简单的代理模式中,也是被代理的类和代理类实现了同一个接口,然后代理类持有被代理的类的引用,使用者只能拿到代理类,对被代理类应该是无感的,透明的,这样就可以透过代理类去对目标方法进行把控和辅助,这是他的核心思想。 

扫描二维码关注公众号,回复: 9864885 查看本文章

这样说来,两者确实非常相似,但是从实际意义出发,代理,偏重因自己无法完成或自己无需关心,需要他人干涉事件流程,更多的是对对象的控制。
装饰,偏重对原对象功能的扩展,扩展后的对象仍是是对象本身。

参考:https://www.jianshu.com/p/c06a686dae39

猜你喜欢

转载自www.cnblogs.com/changeCode/p/12503761.html