您当前的位置:首页 > 文章摘抄 > 正文

适配器模式和代理模式的区别在哪(适配器模式和代理模式的区别)

适配器模式和代理模式的区别在哪(适配器模式和代理模式的区别)

代理模式的组成:

抽象角色:通过接口或抽象类声明真实角色实现的业务方法。

代理角色:它实现了抽象角色,是真实角色的代理。它通过真实角色的业务逻辑方法实现抽象方法,可以附加自己的操作。

真实角色:实现抽象角色,定义真实角色要实现的业务逻辑,代理角色可以调用。

代理模式,面向对象软件的23种常用设计模式之一。(设计模式的说法来自《设计模式》这本书,原名《Design Patterns: Elements of Reusable Object-Oriented Software》。1995年由艾迪森韦斯利朗曼出版。Inc本书提出了23种基本设计模式,第一次将设计模式上升到理论高度并加以规范。)

代理模式的定义:为其他对象提供一个代理来控制对该对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,代理对象可以充当客户端和目标对象之间的中介。

(1)明确职责

真正的作用是实现实际的业务逻辑。其他不属于你职责范围的事情,你也不必在意。你可以通过后期的代理完成一个已完成的事务,附带的结果就是编程简洁明了。

(2)代理对象可以作为客户端和目标对象之间的中介,从而起到中介的作用,保护目标对象。

(3)高可扩展性

适配器模式在计算机编程中,适配器模式(有时称为包装器样式或包装器)使类的接口适应用户的期望。通过将类自己的接口包装在一个现有的类中,改编允许通常由于不兼容的接口而不能一起工作的类一起工作。

有两种类型的适配器模式:

对象适配器模式

-在这种适配器模式下,适配器保存它所包装的类的实例。在这种情况下,适配器调用包装对象的物理实体。

类适配器模式

-在这种适配器模式下,适配器继承自己实现的类(一般是多重继承)。

使用前提:

1.所有要实现的方法都在接口中指定。

2.但是,一个想要实现这个接口的具体类只使用了其中的几个方法,其他方法都没用。

实现方法

1.用抽象类实现现有接口,并实现接口中指定的所有方法。这些方法的实现都可以是“平庸”的实现——空方法;但是,这个类中的方法是具体方法,而不是抽象方法。否则,仍然必须实现具体子类中的所有方法,这将失去适配器的原始功能。

2.要实现接口的子类,只能实现1中的抽象类,内部实现时,只实现感兴趣的方法。

需要注意的事项

1.扮演适配器角色的类是实现现有接口的抽象类。

2.为什么要使用抽象类:

不应实例化该类。只充当适配器为它的子类提供一个公共接口,但它的子类只能专注于自己的兴趣。

模式分析

您希望使用现有的适配器模式,但其接口不符合您的需求。您希望创建一个可重用的类,它可以与其他不相关的类或不可预见的类一起工作。你想使用一些现有的子类,但是不可能每个子类化。一旦它们的接口匹配,对象适配器就可以适应它的父类接口。适配器就像普通的变压器,还有电脑变压器和插线板之间的电源连接线。虽然都是三相,但是电脑后面的插孔不能直接插在插线板上。

适配器模式和代理模式的区别简介

适配器模式(Adapter pattern):适配器模式(英文:Adapter pattern)有时也称为包装风格或包装。把一个类的接口转移到用户所期望的。通过将类自己的接口包装在一个现有的类中,改编使得由于接口不兼容而不能一起工作的类可以一起工作。

代理模式:为其他对象提供代理,以控制对该对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,代理对象可以充当客户端和目标对象之间的中介。

第二,困惑

设计模式总是通过增加层来解耦和扩展,但是如果我们在这个抽象的维度中看不到这个层真正的抽象意义,那么我们就很难理解一个模式的真正内涵?我有这个疑问。这两个东西加了一层,但是这一层有什么区别呢?

三个理解

很明显,适配器模式就是因为新旧接口不一致而导致客户端无法满意的问题。但是旧的接口不能完全重构,因为我们还是要使用一些实现这个接口的服务。然后,为了使用先前实现旧接口的服务,我们应该将新接口转换为旧接口;实现这种转换的类是抽象转换器。

比如java,早期的枚举接口是枚举,然后定义的枚举接口是迭代器;很多老类都实现了枚举接口来公开一些服务,但是现在我们想通过传入迭代器接口而不是枚举接口来调用这些服务。这时候我们就需要一个适配器,这样客户端就可以使用这个服务了(服务器只想用迭代器或者只知道这个接口)。

与适配器的应用场景相比,代理是不同的。虽然代理也增加了一层,但是代理提供的接口和原来的接口是一样的。代理模式的作用不是直接向客户端公开实现,而是通过代理层做一些处理。

标签:模式接口类


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 免费ufc直播平台(咪咕视频独家直播UFC274奥利维拉vs盖奇罗斯vs卡拉夜魔回归)

下一篇: 张伟丽个人资料简介(滞留美国3个月)



推荐阅读