适配器模式

ThreadPoolExecutor源码中的适配器模式

北城余情 提交于 2019-12-03 08:18:19
什么是适配器模式 网上已有很多的教程,不细讲了。可以参考: 五分钟了解设计模式(3)---适配器模式 在适配器模式中,一定要识别清楚,Target Adaptee Adapter分别是哪些类或接口,这样才能知道是谁转成谁。 Target: 最终给上下文调用的类 Adaptee: 被适配的类,即需要转成Target Adapter: 将Target和Adaptee连接起来,起转换作用 ThreadPoolExecutor中submit方法用到的适配器模式 ThreadPoolExecutor类提供了submit方法,共有3个重载。这三个方法最终调用到的是execute(Runnable r) 方法,返回一个Future对象,相比直接调用execute(Runnable r)方法,调用方可以获得任务执行的结果。三个submit方法, 都使用了适配器模式,才能将顺利调用execute(Runnable r)方法。 先看看public Future submit(Callable task) 在这个方法中,Target是Runnable(因为execute方法的参数是Runnable类型),Adaptee是Callable。JDK使用了FutureTask类作为Adapter. FutureTask类的继承关系如下 实现了Runnable,可以传参给execute方法;实现了Future

《HeadFirst设计模式》第七章适配器模式与外观模式-读书笔记

纵然是瞬间 提交于 2019-12-03 07:37:41
《HeadFirst设计模式》第七章适配器模式与外观模式-读书笔记 案例代码链接: https://github.com/rainweb521/My-tutorial/tree/master/Design_patterns 什么是适配器 因为现实中到处都有适配器。比方说: 如果你需要在欧洲国家使用美国制造的笔记本电脑,你可能需要使用个交流电的适配器,适配器的作用:它位于美式插头和欧式插座的中间,它的工作是将欧式插座转换成美式插座,好让美式插头可以插进这个插座得到电力。或者也可以这么认为:适配器改变了插座的接口,以符合美式笔记本电脑的需求。 好了,这是真实世界的适配器,那面向对象适配器又是什么?其实,OO适配器和真实世界的适配器扮演着同样的角色:将一个接口转换成另一个接口,以符合客户的期望。 正如图所示,在现有系统和厂商类之间加入一层适配器,可以在不修改原有类的基础上,实现功能。 适配器模式 客户使间适配器的过程如下: 客户通过目标接口调用适配器的方法对适配器发出请求。 适配器使用被适配者接口把请求转换成被适配者的一个或多个调用接口。 客户接收到调用的结果,但并未察觉这一切是适配器在起转换作用。 适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。 外观模式 封装子系统的类,提供一个比较简单的接口,简化了接口,也将客户从组件的子系统中解耦

设计模式 适配器模式

隐身守侯 提交于 2019-12-03 06:41:22
适配器模式:旧接口格式和使用者不兼容,中间加一个适配转换接口 比如国外的插座跟国内的插座不一样,我们需要买个转换器去兼容。 uml类图 代码 class Adaptee { specificRequest() { return '德国标准的插头'; } } class Target { constructor() { this.adaptee = new Adaptee(); } request() { let info = this.adaptee.specificRequest(); return `${info} -> 转换器 -> 中国标准的插头` } } // 测试 let client = new Target(); client.request(); 场景:封装旧接口 // 自己封装的ajax,使用方式如下: ajax({ url: '/getData', type: 'Post', dataType: 'json', data: { id: '123' } }).done(function(){ }) // 但因为历史原因,代码中全都是: // $.ajax({...}) 这个时候需要一个适配器 // 做一层适配器 var $ = { ajax: function (options) { return ajax(options) } } 来源: https:/

设计模式-适配器模式

丶灬走出姿态 提交于 2019-12-03 02:52:51
一、概念 如果系统中 存在不兼容的接口 ,可以通过引入一个适配器使原本不兼容的两个类可以一起工作,而无需修改现有事务的内部结构。 举例说明,生活电压时220V,但是手机、电脑的电压没有这么高,为了使它们也能使用220V的生活电压,需要电源适配器(变压器), 使得 手机和电脑可以与生活用电 兼容 。 适配器模式中定义一个包装类,包装不兼容接口的对象,这个包装类指的就是适配器,它所包装的对象就是是适配者,即被适配的类。 适配器模式分类适配器和对象适配器 二、角色 1.目标抽象类(Target) 用户要用的特定领域的接口,可以是抽象类和接口或具体类。在类适配器中,由于java不支持多重继承,只能是接口。 2.适配者类(Adaptee) 适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下甚至没有适配者类型的源码 3.适配器类(Adapter) 可以调用另一个接口作为转换器,对Traget和Adaptee进行适配,是适配器模式的核心。 在类适配器中,通过实现Target接口并继承Adaptee类来使二者产生关系; 在对象适配器中,通过继承Target并关联一个Adaptee对象使二者产生联系。 三、举例说明 类适配器:现有一个机器人作为抽象类,具备的抽象方法有叫(cry)和移动(move)。另有一个狗类

iOS设计模式之适配器模式

匿名 (未验证) 提交于 2019-12-02 23:59:01
一,适配器的定义 定义 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 需求场景 需要使用以前开发的“一些现存的对象”,但是新环境中要求的接口是这些现存对象所不满足的 二,适配器的结构图   实现步骤: 定义接口,规范适配器的功能 定义适配器父类,便于各个子类的对于接口功能的实现 子类适配器继承父类适配器,实现子类下的接口功能 父类指针指向子类,调用子类的实现方法   结构图: 三,代码示例 接口协议 CellPhoneProtocol.h /** * @brief 面向接口编程,协议负责定义适配接口 */ @protocol CellPhoneProtocol < NSObject > - ( NSString *) name ; - ( NSString *) playMusic ; - ( NSString *) playMovie ; 父类适配器 CellPhone.h @interface CellPhone : NSObject < CellPhoneProtocol > @property ( nonatomic , strong ) id data ; //生成子类接受数据的变量 - ( instancetype ) initWithData :( id ) data ; //便于子类接受数据源

spring 中常用的设计模式

匿名 (未验证) 提交于 2019-12-02 23:34:01
一、 Spring 中常见的设计模式 工厂模式 : BeanFactory 装饰器模式: BeanWrapper 代理模式: AopProxy 单例模式: ApplicationContext 委派模式: DispatcherServlet 策略模式: HandlerMapping 适配器模式: HandlerApdapter 模板方法模式: JdbcTemplate 观察者模式: ContextLoaderListener 二、Spring 的四大模块及典型的 设计模式   4、Spring JDBC 模板方法模式

二十三种设计模式:适配器模式篇(Python)

匿名 (未验证) 提交于 2019-12-02 22:11:45
二十三种设计模式:适配器模式篇Python (1)介绍 适配器模式(Adapter Pattern),一种常用设计模式,属于创建型模式。 即为不兼容的接口打造桥梁,将一个类的接口转换成其他类所需的接口。 (2)解决问题 已有的接口放入新场景的不兼容性 (3)使用场景 创建高度重用性的类,使用适配器可放入不同场景。 已有接口的引入,使用适配器引入已有接口,不用重新构造啦。 嫁接,使用适配器可把A嫁接到B中(AB本来毫无关联)比如狼和人,狼人。 (4)核心 适配器要继承已有对象,来实现接口功能。 (5)代码 结构:将一个类的接口转换成其他类所需的接口 内容:黑暗的降临(新场景),需要人类的反抗,但女人力气弱小拿不起铁制狼牙棒(已有武器类),男人力气大可以拿起来。一位贤者,伟大的赫尔麦吉德(程序员)创造了一种神之手套(适配器),它可以让女人也拿起铁制狼牙棒。 #人类 class Person ( object ) : def __init__ ( self ) : pass def connect_weapon ( self , weapon ) : pass #实例化人类A class Girl ( Person ) : def connect_weapon ( self , weapon ) : print ( '女生只能拿起木制狼牙棒,要想拿起铁制狼牙棒,可能我需要一双手套' )

.NET Core/.NET之Stream简介

匿名 (未验证) 提交于 2019-12-02 22:10:10
之前写了一篇C#装饰模式的文章提到了.NET Core的Stream, 所以这里尽量把Stream介绍全点. (都是书上的内容) .NET Core/.NET的Streams 首先需要知道, System.IO命名空间是低级I/O功能的大本营. Stream的结构 装饰器 , 适配器. backing stores是让输入和输出发挥作用的端点, 例如文件或者网络连接. 就是下面任意一点或两点: 一个源, 从它这里字节可以被顺序的读取 一个目的地, 字节可以被连续的写入. 程序员可以通过Stream类来发挥backing store的作用. Stream类有一套方法, 可以进行读取, 写入, 定位等操作. 个数组不同的是, 数组是把所有的数据都一同放在了内存里, 而stream则是顺序的/连续的处理数据, 要么是一次处理一个字节, 要么是一次处理特定大小(不能太大, 可管理的范围内)的数据. 于是, stream可以用比较小的固定大小的内存来处理无论多大的backing store. 中间的那部分就是装饰器Stream. 它符合装饰模式. 从图中可以看到, Stream又分为两部分: Backing Store Streams: 硬连接到特定类型的backing store, 例如FileStream和NetworkStream Decorator Streams 装饰器Stream

java设计模式

匿名 (未验证) 提交于 2019-12-02 21:53:52
转载原地址: https://blog.csdn.net/a394268045/article/details/51801258 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下: 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化

Java设计模式 之 接口型模式

匿名 (未验证) 提交于 2019-12-02 21:40:30
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010380560/article/details/84529884 适配器模式 (Adapter) 意图: 生活中的例子: 的电脑也不可能直接在220V电影上直接冲电,也用到了电源适配器,然而电脑电源适配器和手机电源 适配器又有所不同。 有两类适配器模式: ・对象适配器模式 - 在这种适配器模式中,适配器容纳一个它我包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体。 ・类适配器模式 - 这种适配器模式下,适配器继承自已实现的类(一般多重继承)。 类适配器模式: /** * 电源适配器接口 * @author tanlvxu * */ public interface SuittedPower { public int getCorrectPower(); } /** * 220V电源类 * @author tanlvxu * */ public class Power { public int getPower(){ //得到220V电压 return 220 ; } } /** * 电脑适配器类 * @author tanlvxu * */ public class ComputerAdapter extends Power implements