适配器模式、装饰器模式、代理模式的区别

网友投稿 329 2022-11-15

适配器模式、装饰器模式、代理模式的区别

适配器模式

Adapter模式通过类的继承或者对象的组合侧重于转换已有的接口,类适配器采用“多继承”的实现方式,带来了不良的高耦合,所以一般不推荐使用。对象适配器采用“对象组合”的方式,更符合松耦合精神。

例如:笔记本 电源适配器,可以将220v转化为适合笔记本使用的电压。

适用性:

你想使用一个已经存在的类,而它的接口不符合你的需求。

你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。

(仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。

代理模式

意图:为其他对象提供一种代理以控制对这个对象的访问,解决直接访问某些对象是出现的问题。

例如:律师本身就是我们维权的一个代理!

适用性:在需要用比较通用和复杂的对象指针代替简单的指针的时候,使用Proxy模式。

下面是一 些可以使用Proxy模式常见情况:

远程代理(Remote Proxy)为一个对象在不同的地址空间提供局部代表。

虚代理(Virtual Proxy)根据需要创建开销很大的对象。

智能指引(Smart Reference)取代了简单的指针,它在访问对象时执行一些附加操作。 它的典型用途包括:

对指向实际对象的引用计数,这样当该对象没有引用时,可以自动释放它(也称为SmartPointers)。

当第一次引用一个持久对象时,将它装入内存。

在访问一个实际对象前,检查是否已经锁定了它,以确保其他对象不能改变它。

装饰模式

意图:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。Decorator模式采用对象组合而非继承的手法,实现了在运行时动态的扩展对象功能的能力,而且可以根据需要扩展多个功能,避免了单独使用继承带来的“灵活性差”和“多子类衍生问题”。同时它很好地符合面向对象设计原则中“优先使用对象组合而非继承”和“开放-封闭”原则。

例如:一幅画,可以直接挂到墙上,也可以加上框架和镶上玻璃后,再挂到墙上。

适用性:

在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。

处理那些可以撤消的职责。

当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。

适配器模式、装饰器模式、代理模式的区别

适配器的特点在于兼容,从代码上的特点来说,适配类与原有的类具有相同的接口,并且持有新的目标对象。

就如同一个三孔转2孔的适配器一样,他有三孔的插头,可以插到三孔插座里,又有两孔的插座可以被2孔插头插入。

适配器模式是在于对原有3孔的改造。

在使用适配器模式的时候,我们必须同时持有原对象,适配对象,目标对象。。。。

装饰器模式特点在于增强,他的特点是被装饰类和所有的装饰类必须实现同一个接口,而且必须持有被装饰的对象,可以无限装饰。

代理模式的特点在于隔离,隔离调用类和被调用类的关系,通过一个代理类去调用。

总的来说就是如下三句话:

1 适配器模式是将一个类(a)通过某种方式转换成另一个类(b)。

2 装饰模式是在一个原有类(a)的基础之上增加了某些新的功能变成另一个类(b)。

3 代理模式是将一个类(a)转换成具体的操作类(b)。

总结

只需要将原接口转化为客户希望的另一个接口,就是适配器模式。转化无非就是1.继承原类或者实现原接口 2.持有原接口的对象,再实现目标接口。那么第一种就是类的适配,第二种就是对象的适配。

代理模式和适配器模式最大的区别,代理模式是与原对象实现同一个接口,而适配器类则是匹配新接口,说白了,实现一个新的接口。

在装饰器模式中,必须要有被装饰的类和装饰的类。代理模式一定是自身持有这个对象,不需要从外部传入。而装饰模式的一定是从外部传入,并且可以没有顺序,按照代码的实际需求随意挑换顺序。再从使用上来看,代理模式注重的是隔离限制,让外部不能访问你实际的调用对象,比如权限控制,装饰模式注重的是功能的拓展,在同一个方法下实现更多的功能。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【无人机编队规划】基于matlab遗传算法无人机编队位置规划【含Matlab源码 1987期】
下一篇:第10篇:Mybatis的插件设计分析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~