代理模式,适配器模式,装饰者模式,别再傻傻分不清楚了

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


适配器模式主要解决 接口转换的问题,代理模式主要解决 对象无法直接访问的问题,装饰者模式主要用来 增强功能

适配器模式和代理模式

首先看下适配器模式和代理模式的类图,细心观察会发现对于代理模式RealSubject实现了Subject的接口,而适配器模式的Adaptee并没有实现Target接口,这说明对于代理模式客户端最终访问的是同一个接口,而对于适配器模式,客户端最终访问的是不同的接口。所以适配器解决的是接口转换的问题,可以将A接口的请求转成B接口,而对于代理模式来说客户端调用的是同一个接口,只不过由于某些原因实现了该接口的对象无法直接访问,所以需要通过代理对象来间接访问。

可能这样说很多人还是没法理解,所以我分别举个例子。

适配器模式
某些旧功能想做升级,因为旧功能用的是旧接口,而新功能用的是新接口,这就存在接口不兼容问题,旧接口因为历史原因不能直接换成新接口,这时候就可以通过适配器做接口转换,使旧的功能也可以访问新接口。

代理模式
Android进程间通信是通过binder实现的,binder实现进程间通信用到了代理模式。A进程想访问某个功能,这个功能在本地和B进程都有相同的实现,本地接口可以创建本地对象直接访问,而B进程的接口就需要通过创建代理对象进行间接访问。代理对象在其中主要解决了数据的跨进程通信问题,首先将数据序列化后从A进程传到B进程并作为参数传递给调用接口,接口执行完后将返回的数据再发给A进程,代理对象将数据反序列化后传递给A进程的调用对象。

代理模式:间接访问对象
在这里插入图片描述
适配器模式:接口兼容
在这里插入图片描述
代理模式和装饰模式
对于装饰模式,主要是用来增强功能,当你想扩展某些功能,但是又不想通过继承实现,那么可以使用装饰模式实现,通过装饰
模式可以扩展功能,而且可以复用装饰者对象,相比于继承会更加灵活。虽然它的类图和代理模式长得也很像,但是它们解决的问题是不一样的,一个主要解决对象无法直接访问的问题,一个是用来扩展功能。

装饰者模式:扩展系统功能
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式、适配器模式装饰者模式代理模式、外观模式、桥接模式、组合模式、享元模式、策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式 ### 设计模式的三大类 **创建型模式(Creational Pattern):**对类的实例化过程进行了抽象,能够将软件模块中**对象的创建**和对象的使用分离。 (5种)工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式 情景记忆:两个人在聊天。一个问:这家**工厂**是干什么的?另一个说:**造 圆型 丹**药的。5个。 **结构型模式(Structural Pattern)**:关注于对象的组成以及对象之间的依赖关系,描述如何将类或者对象结合在一起形成更大的结构,就像**搭积木**,可以通过简单积木的组合形成复杂的、功能更为强大的结构。 (7种)适配器模式装饰者模式代理模式、外观模式、桥接模式、组合模式、享元模式 情景记忆:想象自己正在一个,无论是**外观**还是内部**装饰**都很豪华的度假村,**享**受着7天的带薪年假,那里有小**桥**流水,有**组合**了东西方文化的美食,有会说各国语言的服务员(即**适配器**),还可以**代理**预订各国各航班机票。7个。 **行为型模式(Behavioral Pattern)**:关注于对象的行为问题,是对在不同的对象之间划分责任和算法的抽象化;不仅仅关注类和对象的结构,而且重点关注它们之间的**相互作用**。 (11种)策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式 情景记忆:一个**访客**来到一家房屋**中介**门口,正在**观察**宣传栏里的房屋信息,偶然间听到店长对一位新人说:“你向客人推荐房屋的**策略**用错了,你应该用**迭代**的方式介绍所有房源。客人走后,登记客人信息的**模板**也用错了。你的师傅没有向你**解释**清楚,他也有**责任**。我**命令**你用笔记记下我刚才说的话,起到**备忘**的目的”。店长走后,那位新人的**状态**很低落。
代理模式装饰者模式是两种常见的设计模式,它们都属于结构型设计模式,但在功能和使用场景上有所不同。 1. 代理模式代理模式是通过创建一个代理对象来控制对原始对象的访问。代理对象与原始对象具有相同的接口,客户端无需知道实际的对象是代理对象还是原始对象。代理模式常用于以下情况: - 远程代理:代理对象可以代表远程的对象,使得客户端可以通过网络访问远程对象。 - 虚拟代理:代理对象可以在需要时创建昂贵的对象,以提高性能。 - 安全代理:代理对象可以控制对原始对象的访问权限。 2. 装饰者模式装饰者模式是在不改变原始对象接口的情况下,动态地给对象添加额外的功能。装饰者模式通过创建一个装饰者类,将原始对象作为参数传入,并在装饰者类中添加额外的功能。装饰者模式常用于以下情况: - 在不修改现有代码的情况下,给对象添加新的行为。 - 需要动态地给对象添加功能,而不是静态地在编译时确定。 适配器模式是另一种常见的设计模式,它用于将一个类的接口转换成客户端所期望的另一个接口。适配器模式常用于以下情况: - 将一个已存在的类集成到另一个接口中。 - 使得原本不兼容的类可以一起工作。 区别: - 代理模式装饰者模式都是通过创建一个中间对象来控制对原始对象的访问,但代理模式更关注对对象的访问控制,而装饰者模式更关注对对象的功能扩展。 - 代理模式通常在不改变原始对象接口的情况下,对对象进行控制,而装饰者模式则通过扩展对象的功能来实现。 - 适配器模式主要用于接口的转换,将一个类的接口转换成另一个接口,而代理模式装饰者模式则是在不改变接口的情况下对对象进行控制或扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值