适配器模式

7、适配器模式

隐身守侯 提交于 2020-02-08 11:23:28
一、适配器模式定义   把一个类的接口变换成客户端所期待的另一种接口,使得原本由于接口不兼容而不能再一起工作的那些类可以一起工作。 二、适配器模式分类   1、类的适配器模式(采用继承实现)   2、对象适配器(采用对象组合方式实现) 三、应用场景   1、系统需要使用现有的类,而这个类的接口不符合系统的需要   2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。这些源类不一定有很重复的接口。   3、在设计中,需要改变多个已有子类的接口,如果使用类的适配器模式,就要针对每一个子类做一个适配器,而这不太实际。 四、类适配器 public interface Switch { public void provide(); } public class Phone { public void use(){ System.out.println("通电使用"); } } public class Adaptor extends Phone implements Switch { @Override public void provide() { System.out.println("提供电力"); super.use(); } } public class Client { public static void main

【设计模式】结构型模式-Adapter模式

て烟熏妆下的殇ゞ 提交于 2020-02-08 07:09:10
功能 负责加入独立的或者不兼容的接口功能 解决 主要解决:主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。 何时使用: 系统需要使用现有的类,而此类的接口不符合系统的需要。 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。 通过接口转换,将一个类插入另一个类系中。(比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。) 如何解决:继承或依赖(推荐) 关键代码:适配器继承或依赖已有的对象,实现想要的目标接口 优缺点 优点: 可以让任何两个没有关联的类一起运行。 提高了类的复用。 增加了类的透明度。 灵活性好 缺点: 过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。 由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。 应用场景 应用实例: 1、美国电器 110V,中国 220V,就要有一个适配器将 110V 转化为 220V。 2、JAVA JDK 1.1 提供了

适配器模式

自古美人都是妖i 提交于 2020-02-08 03:44:07
1. 定义 将一个类的接口转换成另一个种接口,让原本接口不兼容的类可以兼容。 2. 代码 场景:手机充电需要5V电压,所以需要将220V电压转换为5V电压 public class AdapterDemo { static public class Voltage220 { public int output220 ( ) { int src = 220 ; System . out . println ( "电压 = " + src ) ; return src ; } } interface Voltage5 { int output5 ( ) ; } static class VoltageAdapter implements Voltage5 { private static Voltage220 voltage220 ; public VoltageAdapter ( ) { voltage220 = new Voltage220 ( ) ; } @Override public int output5 ( ) { int src = voltage220 . output220 ( ) ; int dst = src / 44 ; return dst ; } } static class Phone { public void charging ( Voltage5

设计模式之适配器模式

故事扮演 提交于 2020-02-08 00:13:52
适配器模式(Adapter Pattern)是指将一个类的接口转移成用户期望的另外一个接口,使原本接口不兼容的类可以一起工作,属于结构性设计模式。平常的充电器转换头就是一个适配器。 场景: 已存在的类的方法和需求不匹配的情况 下面就以充电器转换头为例 android 充电器 public class MicroUSB { public void chargingHead(){ System.out.println("android 充电接口"); } } Type-C 转接头 public interface TypeC { void typeCConverter(); } 苹果 转接头 public interface Iphone { void iphoneConverter(); } 转接头适配器 public class ChargeAdapter implements TypeC,Iphone { private MicroUSB microUSB; public ChargeAdapter(MicroUSB microUSB) { this.microUSB = microUSB; } @Override public void typeCConverter() { microUSB.chargingHead(); System.out.println(

23种设计模式

女生的网名这么多〃 提交于 2020-02-06 02:57:58
23种模式java实现源码 收集五年的开发资料下载地址 : http://pan.baidu.com/share/link?shareid=3739316113&uk=4076915866#dir/path=%2Fstudy 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下: 二、设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则就是说 对扩展开放,对修改关闭 。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。 2、里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。

设计模式(Design Patterns)

和自甴很熟 提交于 2020-02-06 01:41:11
设计模式(Design Patterns) 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式 ,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式 ,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式 ,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类: 并发型模式和线程池模式 。用一个图片来整体描述一下: 二、设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则就是说 对扩展开放,对修改关闭 。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。 2、里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用

适配器模式(Adapter)

浪子不回头ぞ 提交于 2020-02-05 05:06:44
1.定义:   适配器模式是将一个类的接口转换成客户端希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 结构与说明: Client:客户端,调用自己需要的领域接口Target。 Target:定义客户端需要的跟特定领域相关的接口。 Adaptee:已经存在的接口,但与客户端需要的特定领域接口不一致,需要被适配。 Adapter:适配器,把Adaptee适配成Client需要的Target。 2.代码示例   (1)已经存在的应用接口,需要被适配的类Adaptee 1 package com.apdater.example1; 2 /** 3 * 将要被适配的系统接口 4 * @author admin 5 * 6 */ 7 public class Adaptee { 8 9 public void specificRequest(){ 10 11 } 12 }   (2)客户端特定领域的接口 1 package com.apdater.example1; 2 /** 3 * 客户端特定领域的接口 4 * @author zhaohelong 5 * 6 */ 7 public interface Target { 8 public void request(); 9 }   (3)适配器 1 package com.apdater

SpringMVC使用mvc:annotation-driven自动注册标签

淺唱寂寞╮ 提交于 2020-02-04 13:23:18
1、处理器映射器(HandlerMapping)和处理器适配器(HandlerAdapter) 处理器映射器(HandlerMapping)其作用是根据请求的URL路径,通过注解或者XML配置,寻找匹配的处理器(Handler)信息。处理器适配器(HandlerAdapter)其作用是根据映射器找到的处理器(Handler)信息,按照特定规则执行相关的处理器(Handler)。对于用户的请求,处理器映射器和处理器适配器为前端控制器(DispatcherServlet)与处理器(Handler)的交互搭建了重要的桥梁。 处理器映射器和处理器适配器有两种配置方式:一种是基于XML的资源配置,也即非注解的配置方式;另外一种是基于Annotation注解的配置。 1.1 非注解的处理器映射器和适配器(基于XML的资源配置) 第一种配置方式为非注解的处理器映射器和适配器,声明相关的bean及实现即可,配置如下: <!-- 处理器映射器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <!-- 处理器适配器 --> <bean class="org.springframework.web.servlet.mvc.method

<STL源码剖析>阅读笔记之 仿函数和适配器

跟風遠走 提交于 2020-02-04 05:48:07
仿函数(函数对象)和适配器可以说是STL中默默无闻的贡献者,它们没有容器、算法和迭代器那么有名 但是其贡献却很大。这里总结的主要是书中第7、8章的内容。 一 仿函数 仿函数又称函数对象,从名字上可以得出,它本质上是 一种具有函数特质的对象 , 也即可以像使用函 数 一样使用该对象。怎么样做?重载operator()运算符即可,有了这个运算符,我们就可以在仿函数对象后 面加上一对小括号,以此调用仿函数所定义的operator()。STL仿函数可以分为一元和二元,或者算术运 算、关系运算和逻辑运算。 为什么要有仿函数?在算法的设计过程中,我们会发现其本质往往是不变的(例如排序算法的思想),变 化的除了数据之外还有操作(例如排序中不一定是比较大小,也可以是两两之间满足某种关系),仿函数就 是为了这种情况产生的,它替代原来需要函数指针的地方,把这种操作或者策略传给算法,使得算法抽象性 更高,也就更通用。 为什么不用函数指针?很简单的解释是抽象性不够,更进一步说是它无法配接,也就是可以将操 作配接在 一起变换为更复杂的操作(例如compose和bind1st等等方法),仿函数则可以轻松实现这些配接, 使得其功 能异常强大。 仿函数在实现上是一个结构体,并且如上所述重载了operator()运算符,所有的仿函数如果是一元的都继 承自unary_function,二元则继承自binary

设计模式--适配器模式

偶尔善良 提交于 2020-01-29 06:44:34
问题的请提出: 有一个系统需要和新的库搭配使用,但是这个库提供的接口与现有的系统不兼容,需要不改变现有系统的情况下解决这个 问题,就需要将新库的接口转化成当前系统需要的接口,这个时候就需要用到适配器模式。 适配器模式:讲一个类的接口转化成另一个接口,让原本接口不兼容的类实现交互。 在适配器模式中,需要定义一个包装类,包装不兼容接口的对象,这个包装类就是适配器,它所包装的对象就是适配者。 适配器模式的UML图 适配器分为对象适配器和类适配器,类适配器需要多重继承,在java中没办法实现。 在类适配器中,由于适配器是适配者的子类,可以在适配器类中置换一些适配者的方法,使得适配者的灵活性更强。 适配器模式的代码实现 创建一个实体类 public class Car { private String name ; private String color ; public String getName ( ) { return name ; } public void setName ( String name ) { this . name = name ; } public String getColor ( ) { return color ; } public void setColor ( String color ) { this . color = color ; } }