本文地址:http://www.cnblogs.com/archimedes/p/java-adapter-pattern.html,转载请注明源地址。

适配器模式(别名:包装器)

将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

概述

适配器模式是将一个类的接口(被适配者)转换成客户希望的另外一个接口(目标)的成熟模式,该模式中涉及有目标、被适配者和适配器。适配器模式的关键是建立一个适配器,这个适配器实现了目标接口并包含有被适配者的引用。

适用性

1.你想使用一个已经存在的类,而它的接口不符合你的需求。

2.你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。

3.(仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。

参与者

1.Target 定义Client使用的与特定领域相关的接口。

2.Client 与符合Target接口的对象协同。

3.Adaptee 定义一个已经存在的接口,这个接口需要适配。

4.Adapter 对Adaptee的接口与Target接口进行适配

适配器模式的结构与使用

模式的结构中包括三种角色:

  • 目标(Target)

  • 被适配者(Adaptee)

  • 适配器(Adapter)

模式的UML类图:

实战部分

用户已有一个两相的插座,但最近用户又有了一个新的三相插座。用户现在已经有一台洗衣机和一台电视机,洗衣机按着三相插座的标准配有三相插头,而电视机按着两相插座的标准配有两相插头。现在用户想用新的三相插座来使用洗衣机和电视机。

1.目标(Target) : ThreeElectricOutlet.java

public interface ThreeElectricOutlet{public abstract void connectElectricCurrent();
}

2.被适配者(Adaptee): TwoElectricOutlet.java

public interface TwoElectricOutlet{public abstract void connectElectricCurrent(); } 

3.适配器(Adapter): TreeElectricAdapter.java

public class TreeElectricAdapter implements ThreeElectricOutlet{TwoElectricOutlet outlet;TreeElectricAdapter(TwoElectricOutlet outlet){this.outlet=outlet;}public void connectElectricCurrent(){outlet.connectElectricCurrent();}
}

4.应用 Application.java_1

public class Application{public static void main(String args[]){ThreeElectricOutlet outlet;      Wash wash=new Wash();            outlet=wash;                      System.out.println("使用三相插座接通电流:");outlet.connectElectricCurrent();   TV tv=new TV();                    TreeElectricAdapter adapter=new TreeElectricAdapter(tv);outlet=adapter;                   System.out.println("使用三相插座接通电流:");outlet.connectElectricCurrent();   }
}

4.应用 Application.java_2

class Wash implements ThreeElectricOutlet{ String name;Wash(){name="黄河洗衣机";}Wash(String s){name=s;}public void connectElectricCurrent(){turnOn();}public void turnOn(){System.out.println(name+"开始洗衣物。");}
}

4.应用 Application.java_3

class TV implements TwoElectricOutlet{  String name;TV(){name="长江电视机";}TV(String s){name=s;}public void connectElectricCurrent(){turnOn();}public void turnOn(){System.out.println(name+"开始播放节目。");}
}

适配器模式的优点

•目标(Target)和被适配者(Adaptee)是完全解耦的关系。

•适配器模式满足“开-闭原则”。当添加一个实现Adaptee接口的新类时,不必修改Adapter,Adapter就能对这个新类的实例进行适配。

您还可能感兴趣:

java设计模式系列:

java设计模式5--原型模式(Prototype)

java设计模式4--建造者模式(Builder)

java设计模式3--单例模式(Singleton)

java设计模式2--抽象工厂模式(Abstract Factory)

java设计模式1--工厂方法模式(Factory Method)

java设计模式0--设计模式简介

java设计模式6--适配器模式(Adapter )相关推荐

  1. java设计模式adapter,java设计模式-适配器模式(Adapter)

    定义 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 适配器模式的用途 用电器做例子,笔记本电脑的插头一般都是三相的,即除了阳极 ...

  2. Java设计模式之适配器模式(属于结构型模式)

    Java设计模式之适配器模式(结构型模式) 定义:将一个类的接口转换成客户希望的另外一个接口.Adaptor模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 模式中的角色: 目标接口(T ...

  3. 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)

    [索引页] [源码下载] 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) 作者:webabcd 介绍 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本 ...

  4. 【设计模式】—— 适配器模式Adapter

    模式意图 如果已经有了一种类,而需要调用的接口却并不能通过这个类实现.因此,把这个现有的类,经过适配,转换成支持接口的类. 换句话说,就是把一种现有的接口编程另一种可用的接口. 模式结构 [类的适配器 ...

  5. 『设计模式』适配器模式(Adapter)

    23种设计模式+额外常用设计模式汇总 (持续更新) 适配器模式(Adapter) 适配器模式把一一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作. ...

  6. 【设计模式】适配器模式 Adapter Pattern

    适配器模式在软件开发界使用及其广泛,在工业界,现实中也是屡见不鲜.比如手机充电器,笔记本充电器,广播接收器,电视接收器等等.都是适配器. 适配器主要作用是让本来不兼容的两个事物兼容和谐的一起工作.比如 ...

  7. Java 设计模式之适配器模式

    一.了解适配器模式 1.1 什么是适配器模式 适配器模式将一个类的接口,转换成客户期望的另一个接口.适配器让原来接口不兼容的类可以合作无间.适配器模式有两种:"对象"适配器和&qu ...

  8. 设计模式之适配器模式(Adapter)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  9. 二十三种设计模式[6] - 适配器模式(Adapter Pattern)

    前言 适配器,属于类结构型模式.<设计模式 - 可复用的面向对象软件>一书中将之描述为" 将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可 ...

  10. java设计模式 之适配器模式

    <JAVA与模式>一书中开头是这样描述适配器(Adapter)模式的: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作 ...

最新文章

  1. 使用Windows的SHFileOperation外壳函数实现文件操作
  2. LibSVM学习(二)——第一次体验libSvm
  3. [云炬创业基础笔记]第七张创业团队测试6
  4. 应用计算机基础1答案,2017年计算机应用基础习题及答案
  5. 第一章 Spark系统概述
  6. Python模块(7)-SciPy 简易使用教程
  7. Nvidia CUDA初级教程4 GPU体系架构概述
  8. matlab实现层次分析法
  9. java报错空指针异常_springboot全局异常捕获,真香
  10. 爱奇艺NLP:BiLSTM_CRF的关键词自动抽取
  11. 手机便携版_智能体验醇音随行 哈曼卡顿音乐琥珀便携版评测
  12. Spring整合MyBatis框架
  13. 【数电基础知识】各逻辑运算符号盘点
  14. Ubuntu 11.04下thrift-0.8.0的安装 - Linux - 红黑联盟
  15. 高并发,我把握不住啊!
  16. Machine Learning读书会,面试算法讲座,创业活动,算法班(15年6月)
  17. java毕业生设计校园线上点餐系统计算机源码+系统+mysql+调试部署+lw
  18. 最优布线问题(三种方法)
  19. Kylin 4 使用和优化在有赞的实践
  20. ant Design 表单以及表单验证

热门文章

  1. 除了数据属性,Vue 实例还提供了一些有用的实例属性与方法。它们都有前缀 $,以便与用户定义的属性区分开来。
  2. 德勤:95%的受访公司将在2019年投资区块链
  3. 新闻上的文本分类:机器学习大乱斗 王岳王院长 王岳王院长 5 个月前 目标 从头开始实践中文短文本分类,记录一下实验流程与遇到的坑 运用多种机器学习(深度学习 + 传统机器学习)方法比较短文本分类处
  4. 腾讯数十亿广告的基础是精准实时推荐
  5. 关于C++指针的理解
  6. Apache ZooKeeper - JMX监控 ZooKeeper 的运行状态
  7. Apache ZooKeeper - 使用源码启动ZK集群模式
  8. linux图形图像三剑客,就linux三剑客简单归纳
  9. 微服务配置中心是干啥的_微服务入门到精通-分布式配置中心(续)
  10. 2021-06-04