* 其他业务逻辑
如果像我之前对设计模式一无所知时,大概率会更改为以下的代码:
*!* 获取服务对象
*!* m.XMLWebServer = ......
*! * 其他业务逻辑
然鹅,这样的改动有 N 处......虽然根据熵增定律最终会混乱不堪,但是,谁也不想迅速的形成屎山......如果你理解了适配器设计模式,至少,可以减缓趋势。 首先,设计一个适配器类
***
适配器模式 两个不兼容的接口之间的桥梁,可以使接口不兼容导致不能一起工作的那些类可以一起工作 UML ? UsbTypeAImpl() ; usbTypeA.printTypeA(); } } 当我们的手机接口Type-A时,但是数据线只有Type-C的时候,就需要用转接口做适配,这种情况下就要增加一个适配器 /** * @Desc 通过适配器访问 Usb-C */ public class Adapter implements UsbTypeA { private UsbTypeC
适配器模式 ( 类适配器 ) 代码模板 II . 适配器模式 ( 对象适配器 ) 代码模板 III . 适配器模式 代码示例 I . 适配器模式 ( 类适配器 ) 代码模板 ---- 1 . : 被适配者方法"); } } 2 . 适配器模式 ( 对象适配器 ) 代码模板 ---- 1 . : 被适配者方法"); } } 2 . 适配器模式 代码示例 ---- 1 . 需求描述 : 家庭中的插座提供 220 V 电压 , 手机需要使用 5V 电压进行充电 ; 2 .
文章目录 适配器模式 类适配器 对象适配器 接口适配器 总结 适配器模式 适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作 也称包装器(Wrapper),属于结构型模式。适配器模式主要分为三类:类适配器模式、对象适配器模式、接口适配器模式 工作原理 将一个类的接口转换成另一种接口,让原本接口不兼容的类可以兼容。 简单来说,适配器模式就像个插头转换器,让不同标准的插头和插座可以一起使用,而插座就是原来的接口,插头是用户期望的接口。或者类比电源适配器,把原来的220V电压转换成5V电压等。 接口适配器 继承那边可以解耦了,那能不能从接口这边解耦? 接口适配器也称缺省适配器模式,适用于一个接口不想使用其所有的方法的情况。 src); return src; } } //适配接口 public interface IVoltage5V { public int output5V(); public void m2(
适配器模式 模式定义 将一个类的接口转换成客户希望的另一个接口。 Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 应用场景 当你希望使用某些现有类,但其他接口与你的其他代码不兼容时,请使用适配器模式 当你希望重用几个现有的子类,这些子类缺少一些不能添加到超类中的公共功能时 ,请使用适配器模式 优点 符合单一指责原则 符合开闭原则 实现 对象适配器模式 package v1; /** * 对象适配器模式 * 需求: * 将家用220v电压转换成手机能使用的5v电压 System.out.println(String.format("原始电压:%d -> %d",i,5)); return 5; } } 类的适配器模式 package v2; /** * 类的适配器模式 */ class Adaptee{ private int output220v; public int output220v(){
* 这个类是一个抽象类,主要用于增强Servlet的功能,在这个类中 所有的servlet都有的功能 * @author Administrator * 1.输出json数据的功能 * 设计模式 :适配器模式 * */ public abstract class CommonServlet extends HttpServlet { protected int rows=10;
适配器模式定义:将一个类的接口,转化成客户期望的另一个接口,适配器让原来接口不兼容的类可以合作无间。 适配器在现实中的表现:插座转化器,形状拼图等等。 面向对象中的实现: 本文例子: 狗类,兔子类,适配器类,测试类 要求: 1.缺少兔子类对象,先用狗类冒充一下 2.不会让客户调用兔子类的方法,发生改变(例如在客户调用的方法内做判断如果是某个值,去调用狗类的方法 ,去冒充兔子类) 代码实现: 狗的接口类 1package com.adapterPattern.dog; 2 3/** 4 * @program: test 5 * @description 通过适配器,成功的将新的兔子类给实现了,只不过内部走的是狗的方法。testRabbit()还是正常的调用,不做任何改变。 com.adapterPattern.rabbit.LittleWhiteRabbit; 7import com.adapterPattern.rabbit.Rabbit; 8 9/** 10 * @program: test 11 * @description: 适配器模式测试类
再比如,变压器也是一个适配器,电厂来的是几十万伏的电,但家用电是220V,所以需要将几十万伏的电转成220V的电才能进行使用。 二、实例 比如电源适配的,一般家用电都是220V,但是手机充电只需要5V,此时手机充电器就相当于是一个适配器,将220V转成手机充电需要的5V。 ac220V; } @Override public int output() { int input = ac220V.output(); 2、 三、源码实例 Java的IO使用了适配器模式,Reader和InputStream是没有层次关系的。
[设计模式] 适配器模式 + 外观模式 ? 手机用户请 横屏获取最佳阅读体验, REFERENCES中是本文参考的链接,如需要链接和更多资源,可以关注其他博客发布地址。 适配器模式: 将一个类的接口,转换成客户期望的另一个接口。 利用多重继承实现,请求传送给被被适配者 APIAdapter 继承 ProductV1API 和 ProductV2API的实现类,在适配器内部实现请求方法的转发。 适配器和装饰者模式 各自特点 适配器用来封装接口,解决接口版本迭代对客户端的兼容问题,适配器将一个接口转成另一个接口 装饰者模式用来包裹对象,补充对象属性,被装饰者可以被装饰器替代使用,支持多层嵌套。 可以改变接口以符合客户的期望 适配器实现的复杂度和目标接口的大小和复杂度成正比 类适配器需要使用多重继承,Java中无法使用 适配器讲一个对象包装起来以改变其接口 外观模式: 将客户从一个复杂子系统中解耦
适配者模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 适配器模式的实现方式 类适配器模式 :主要是通过继承来适配两个接口。 主要是使用多重继承的方式,但是OC不支持多继承,只支持单继承,所以在iOS中我们使用继承和协议的方式来实现类的适配 对象适配器模式 :组合一个被适配类的引用,不是采用继承被适配的类的方式 适配器模式类图 类适配器模式 类适配器模式 TargetProtocol:目标协议 Adaptee:被适配对象 Adapter:适配器,实现了 request方法,但是没有去重写Adaptee类中 specificRequest 方法,而是在Adapter 中的request方法中调用超类的specificRequest方法 对象适配器模式 对象适配器模式 TargetProtocol:目标协议 Adaptee:被适配对象 Adapter:适配器,Adapter 引用 Adaptee,在request方法中,adaptee对象调用specificRequest方法 类适配器模式与对象适配器模式对比 类适配器模式 对象适配器模式
适配器模式 说完代理模式,说适配器模式,是因为它们很相似,这里可以做个比较。 适配器模式做的就是,有一个接口需要实现,但是我们现成的对象都不满足,需要加一层适配器来进行适配。 适配器模式总体来说分三种:默认适配器模式、对象适配器模式、类适配器模式。先不急着分清楚这几个,先看看例子再说。 默认适配器模式 首先,我们先看看最简单的适配器模式默认适配器模式(Default Adapter)是怎么样的。 下面,我们看看类适配模式怎么样的。 类适配器模式 废话少说,直接上图: [adapter-2.png] 看到这个图,大家应该很容易理解的吧,通过继承的方法,适配器自动获得了所需要的大部分方法。 看看下图可能会清晰一些: [decorator-2.png] 到这里,大家应该已经清楚装饰模式了吧。 下面,我们再来说说 java IO 中的装饰模式。
其别名为包装器(Wrapper) ● 适配器模式属于结构型模式 ● 主要分为三类:类适配器模式、对象适配器模式、接口适配器模式 二、适配器的工作原理 ---- 1)、适配器模式:将一个类的接口转化成另一种接口 2)、从用户的角度看不到被适配者,是解耦的。 3)、用户调用适配器转化出来的目标接口方法,适配器再调用被适配者的相关接口方法。 4)、用户收到反馈结果,感觉知识和目标接口交互。如下图所示: ? 三、类适配器模式 ---- 类适配器模式可采用多重继承方式实现,如 C++ 可定义一个适配器类来同时继承当前系统的业务接口和现有组件库中已经存在的组件接口;Java 不支持多继承,但可以定义一个适配器类来实现当前系统的业务接口 类适配器应用实例:以手机、充电器、电源为例来说明适配器模式。 这样也复核了“合成复用原则 OCP”(在系统中尽量使用关联代替继承关系),因此对象适配器模式是适配器模式常用的一种。
定义 适配器模式的主要作用是把原本不兼容的接口通过适配修改做到统一,方便调用方使用。 就像日常生活中用到的万能充电器、数据线和笔记本的转换接头,它们都为适配各种不同的接口进行了兼容。 使用场景:有动机地修改一个正常运行的系统的接口,这时应该考虑使用适配器模式。 注意事项:适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。(用于项目重构?) fun.lixj.design.service.OrderService - 自营商家,查询用户的订单是否为首单:100001 判断首单,接口适配(自营):false 总结 从本文可以看出,即使不使用适配器模式 但是使用了适配器模式可以让代码更干净、整洁,减少大量重复的判断和使用,同时也让代码更易于维护和扩展。 Copyright: 采用 知识共享署名4.0 国际许可协议进行许可 Links: https://lixj.fun/archives/设计模式-适配器模式
以最简单的module学习设计模式,理解最重要 适配器模式:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 ? 适配器模式的三个特点: 1、 适配器对象实现原有接口 2、 适配器对象组合一个实现新接口的对象(这个对象也可以不实现一个接口,只是一个单纯的对象) 3、 对适配器原有接口方法的调用被委托给新接口的实例的特定方法 白话适配器模式 使用电源插座的例子来描述适配器模式,假设以下场景: 场景:国标(国内标准)插座为3个孔,德标准(德国标准)插座为2个孔 问题:一国内游客去德国旅游,拿着国标的充电器(3个孔)如何使用德标的插孔 (2个孔) 解决办法:电源转化适配器 UML类图: ? 这就要求: 1 适配器必须实现原有的旧的接口 2 适配器对象中持有对新接口的引用,当调用旧接口时,将这个调用委托给实现新接口的对象来处理,也就是在适配器对象中组合一个新接口。
适配器模式其实很简单,或者说学了设计模式到现在,虽然每次看到各种名字的设计模式就觉得很高端,但当真正了解过后才知道其实也没有那么玄乎,有的东西在我们平时的时候都已经用到过了。 比如这次我们要说的适配器模式,说白了,就是以前的代码接口,和我们客户端需要调用的接口不一致,但以前代码功能又是我们想要的功能。 String[] args){ 11 Target target = new Adapter(); 12 target.request(); 13 } 14 } 适配器模式 ,并不是什么很高端看不懂的模式,也很简单。 ,我们用这实际的例子来看看UML类结构是怎样的,以此来加深我们对适配器模式的理解。
适配器模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作。——《设计模式:可复用面向对象软件的基础》 适配器模式是一种对象结构型模式。 分类 适配器模式有分三类: 1、类适配器模式(class adapter pattern) 2、对象适配器模式(object adapter pattern) 3、缺省适配器模式(default 对象适配器模式: 类适配器模式的优点就是对象适配器模式的缺点,不能置换适配者类的方法。 ); // 2、使用缺省适配器只需要实现需要用到的接口方法 Operator operator2 = new Operator(); operator2.addOperation(new 2、扩展性:适配器使得系统多了一个方式扩展系统的功能 3、耦合性:一定程度上的解耦 缺点 过多地使用适配器,增加系统理解难度。
https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star、fork哈 文章也将发表在我的个人博客,阅读体验更佳: www.how2playlife.com 本文是微信公众号 适配器模式 说完代理模式,说适配器模式,是因为它们很相似,这里可以做个比较。 适配器模式做的就是,有一个接口需要实现,但是我们现成的对象都不满足,需要加一层适配器来进行适配。 适配器模式总体来说分三种:默认适配器模式、对象适配器模式、类适配器模式。先不急着分清楚这几个,先看看例子再说。 默认适配器模式 首先,我们先看看最简单的适配器模式**默认适配器模式(Default Adapter)**是怎么样的。 适配器模式和代理模式的异同 比较这两种模式,其实是比较对象适配器模式和代理模式,在代码结构上,它们很相似,都需要一个具体的实现类的实例。
适配器模式 说完代理模式,说适配器模式,是因为它们很相似,这里可以做个比较。 适配器模式做的就是,有一个接口需要实现,但是我们现成的对象都不满足,需要加一层适配器来进行适配。 适配器模式总体来说分三种:默认适配器模式、对象适配器模式、类适配器模式。先不急着分清楚这几个,先看看例子再说。 默认适配器模式 首先,我们先看看最简单的适配器模式默认适配器模式(Default Adapter)是怎么样的。 下面,再介绍“正统的”适配器模式。 对象适配器模式 来看一个《Head First 设计模式》中的一个例子,我稍微修改了一下,看看怎么将鸡适配成鸭,这样鸡也能当鸭来用。 适配器模式和代理模式的异同 比较这两种模式,其实是比较对象适配器模式和代理模式,在代码结构上,它们很相似,都需要一个具体的实现类的实例。
适配器模式有两种不同形式 类的适配器模式 对象的适配器模式 类的适配器模式结构 类的适配器模式把被适配的类的API转换成目标类的API, 其静态结构如下: ? 在上图可以看出,Adaptee类并没有 sampleOperation2() 方法,而客户端则期待这个方法。 注意,由于这里讨论的是类的适配器模式,因此目标不可以是类。 源角色(Adaptee): 现有需要适配的接口。 适配器角色(Adapter): 适配器类是本模式的核心。适配器把源接口转换成目标接口。 * 因此适配器类补充上这个方法 */ @Override public void sampleOperation2() { //write your 对象的适配器模式的结构 与类的适配器模式一样,对象的适配器模式把适配的类的API转换成为目标类的API, 与类的适配器模式不同的是,对象的适配器模式不是使用继承关系连接到 Adaptee类, 而是使用委派关系连接到
适配器模式是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一种接口,使得原本由于接口不兼容而不能一起工作的类可以协同工作。 适配器模式包含以下角色:- 目标接口(Target):客户端所期望的接口,也是适配器要实现的接口。- 源接口(Adaptee):需要被适配的接口或类。 - 适配器(Adapter):将源接口转换成客户端所期望的接口的类。 下面是一个使用C#语言实现适配器模式的示例,实例中包含一个需要被适配的类`Adaptee`和一个实现了客户端所期望的接口`ITarget`的适配器类`Adapter`:// 源接口/类// 源接口/类class Console.WriteLine("Specific request from Adaptee."); }}// 目标接口interface ITarget{ void Request();}// 适配器类