首页 > 其他分享 >适配器模式

适配器模式

时间:2023-04-24 17:37:36浏览次数:37  
标签:对象 适配 适配器 接口 模式 子类 Adaptee


适配器模式

定义:将一个类的接口转换成客户希望的另外一个接口。A d a p t e r 模式使得原本
由于接口不兼容而不能一起工作的那些类可以一起工作。

解决问题:已经存在类似功能的类或接口,但是方法签名不一样。

适用性:

* 你想使用一个已经存在的类,而它的接口不符合你的需求。
* 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口
可能不一定兼容的类)协同工作。
* (仅适用于对象A d a p t e r )你想使用一些已经存在的子类,但是不可能对每一个
都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。

对象适配器比较好,以及如果使用类适配器的话,我们可能只用到一个方法,这样的话我们把他继承
过来的话就相当于类污染了。

就好比我们使用常量的时候,是继承常量类还是直接引用了。如果继承过来的话就造成了常量污染。

适配器的目的是将已有类的功能提供给客户类,是一个中间者的角色。

类适配器是客户类有一个接口规范的情况下可用,此时适配类只需作为功能类的子类,并
实现接口并可,直接用功能类实现了客户类的要求。

而对象适配类是在客户类没有提供接口的情况下用的,适配类作为客户类的子类,并在其
中实例化一个功能类的对象,并调用此对象的方法实现适配,故称对象适配。

两者的区别我认为有以下几点

1.类适配器模式需要创建自身来创建一个Adaptee,
对象适配器模式可以直接使用一个已有的Adaptee的实例来转换接口。

2. 类适配器继承了Adaptee,所以可以通过覆写来扩展SpecificRequest()
对象适配器和Adaptee是包含关系不能扩展;(其实也可以扩展的见下面)

3.类适配器模式因为是继承所以相对静态,而对象适配器模式是包含是组合相对
灵活(可以通过写adaptee子类扩展功能)

那什么时候使用对象适配什么时候使用类适配呢.我想这可能而得取决于你所处理
问题所会影响到的因素吧.
两者的一些明显的区别是:类继承仅仅引入了一个新的类或接口,而无须间接引用所
适配的类的对象.要通过委托一个具体的适配类,使适配
类适配接口,因此无法适配所有的子类.这名话有点绕,那说的是什么意思呢?就是在
我们对一个类及它所有的子类进行匹配的时候,进行适配的类则总是不能胜任工作的.
但进行适配的类可以重定义(override)一些所适配的方法.而对象适配则很难.......
但是对象适配也有他自己的好处.很明显他是解耦的,他也允许进行适配的类可以与适
配类及其多个子类进行工作.

标签:对象,适配,适配器,接口,模式,子类,Adaptee
From: https://blog.51cto.com/u_16087012/6221529

相关文章

  • 设计模式总结
    设计模式设计模式(Designpattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。一.Factory(简单工厂)定义:用一个方法去代替构造器或者是new关键字,把......
  • 设计模式-原型模式-Java中使用示例-节日发送邮件活动
    场景设计模式-原型模式-浅克隆和深克隆在Java中的使用示例:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/127576328上面初步记录了原型模式的使用示例,下面再记录一个银行节假日或者搞活动时发送邮件的例子。原型模式原型模式(PrototypePattern)的简单程度仅次......
  • suricata(六)——suricata之IPS模式
    suricata之IPS模式一、简介suricata具有IDS(IntrusionDetectionSystems,入侵检测系统)的功能外,还具有IPS(IntrusionPreventionSystem,入侵防御系统)功能,对不符合配置规则的报文进行直接阻断,对滥用报文进行限流以保护网络带宽资源。Suricata本身是不具有拦截功能的,想要让它拦截包......
  • 13、c++使用单例模式实现命名空间函数
    本案例实现一个test命名空间,此命名空间内有两个函数,分别为getName()和getNameSpace();声明命名空间及函数namespacetest{conststd::string&getName()和();conststd::string&getNameSpace();}命名空间内实现单例类实现一个单例类,构造函数要为private,自身对......
  • 单例 (Singleton)设计模式介绍
    单例(Singleton)设计模式1.什么是设计模式?什么是单例设计模式?设计模式:是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模免去我们自己再思考和摸索。就像是经典的棋谱,不同的棋局,我们用不同的棋谱。”套路”单例设计模式:所谓类......
  • linux切换桌面模式
    指定运行级别(指定运行级别使用的是init0~6或者是systemctlget-default是查看当前运行级别。systemset-defaultmulti-user.target表示切换到运行级别3systemset-defaultgraphical.target表示切换到运行级别5) ......
  • docker网络模式
    一、docker网络概述1、docker网络实现的原理Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一......
  • 设计模式-工厂模式
    适用性1.当一个类不知道它所必须创建的对象的类的时候。2.当一个类希望由它的子类来指定它所创建的对象的时候。3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。......
  • 15分钟入门23种设计模式:图解,范例和对比
    本文力图在15分钟内,通过UML图解、范例和类比,让你对面向对象的23种设计模式形成提纲挈领的认识,从而让我们在面临代码设计问题时更加成竹在胸。本文源代码: UML, SampleCode。开门见山我们直奔主题,分类呈现23种设计模式的庐山真面目:创建型(5)Creational结构型(7)Structural......
  • 设计模式分类(创建型模式、结构型模式、行为模式) #2
    1.创建型模式创建型模式,就是创建对象的模式,抽象了实例化的过程。它帮助一个系统独立于如何创建、组合和表示它的那些对象。关注的是对象的创建,创建型模式将创建对象的过程进行了抽象,也可以理解为将创建对象的过程进行了封装,作为客户程序仅仅需要去使用对象,而不再关系创建对象过程......