一、适配器模式概述

  将一个类的接口转换成客户可用的另外一个接口。

  将原本不兼容不能在一起工作的类添加适配处理类,使其可以在一起工作。

二、适配器模式场景

  要想只有USB接口的电脑想使用PS/2接口的键盘,必须使用PS/2转USB的适配器。

三、适配器模式示例

  (1)定义USB接口

  1. /**
  2. * 客户所期待的接口(相当于USB接口)
  3. * @author CL
  4. *
  5. */
  6. public interface Target {
  7.  
  8. void handleReq();
  9.  
  10. }

  (2)定义PS/2键盘

  1. /**
  2. * 被适配的类 (相当于例子中的PS/2键盘)
  3. * @author CL
  4. *
  5. */
  6. public class Adaptee {
  7.  
  8. public void request() {
  9. System.out.println("我是PS/2接口的键盘!");
  10. }
  11.  
  12. }

  (3)定义PS/2转USB的适配器

  a. 类适配器

  1. /**
  2. * 适配器(相当于可以将PS/2接口转换成USB接口的适配器本身)
  3. * 类适配器方式
  4. * @author CL
  5. *
  6. */
  7. public class Adapter extends Adaptee implements Target {
  8.  
  9. public void handleReq() {
  10. super.request();
  11. }
  12.  
  13. }

  测试:

  1. /**
  2. * 客户端类(相当于只能识别USB接口键盘的电脑)
  3. * @author CL
  4. *
  5. */
  6. public class Client {
  7.  
  8. public void test(Target t) {
  9. t.handleReq();
  10. }
  11.  
  12. public static void main(String[] args) {
  13. Client c = new Client();
  14. Adaptee a = new Adaptee();
  15.  
  16. Target t = new Adapter(); //类适配器方式
  17.  
  18. c.test(t);
  19. }
  20.  
  21. }

  控制台输出:

  1. 我是PS/2接口的键盘!

  b.对象适配器

  1. /**
  2. * 适配器(相当于可以将PS/2接口转换成USB接口的适配器本身)
  3. * 对象适配器方式,使用了组合的方式跟被适配对象整合
  4. * @author CL
  5. *
  6. */
  7. public class Adapter implements Target {
  8.  
  9. private Adaptee adaptee;
  10.  
  11. public Adapter(Adaptee adaptee) {
  12. this.adaptee = adaptee;
  13. }
  14.  
  15. public void handleReq() {
  16. adaptee.request();
  17. }
  18.  
  19. }

  测试:

  1. /**
  2. * 客户端类(相当于只能识别USB接口键盘的电脑)
  3. * @author CL
  4. *
  5. */
  6. public class Client {
  7.  
  8. public void test(Target t) {
  9. t.handleReq();
  10. }
  11.  
  12. public static void main(String[] args) {
  13. Client c = new Client();
  14. Adaptee a = new Adaptee();
  15.  
  16. Target t = new Adapter3(); //类适配器方式
  17.  
  18. c.test(t);
  19. }
  20.  
  21. }

  控制台输出:

  1. 我是PS/2接口的键盘!

GOF23设计模式之适配器模式(Adapter)的更多相关文章

  1. GOF23设计模式之适配器模式

    GOF23设计模式之适配器模式 结构型模式: 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题. 分类:适配器模式.代理模式.桥接模式.装饰模式.组合模式.外观模式. ...

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

    原文:乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) 作者:webabc ...

  3. 8.3 GOF设计模式二: 适配器模式 Adapter

    GOF设计模式二: 适配器模式 Adapter  为中国市场生产的电器,到了美国,需要有一个转接器才能使用墙上的插座,这个转接 器的功能.原理?复习单实例模式  SingleTon的三个关键点  ...

  4. 怎样让孩子爱上设计模式 —— 7.适配器模式(Adapter Pattern)

    怎样让孩子爱上设计模式 -- 7.适配器模式(Adapter Pattern) 标签: 设计模式初涉 概念相关 定义: 适配器模式把一个类的接口变换成client所期待的还有一种接口,从而 使原本因接 ...

  5. 【GOF23设计模式】适配器模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_适配器模式.对象适配器.类适配器.开发中场景  适配器模式  笔记本电脑只有USB接口,新买的键盘是PS2接口的,需要用适 ...

  6. 二十四种设计模式:适配器模式(Adapter Pattern)

    适配器模式(Adapter Pattern) 介绍将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.示例有一个Message实体类 ...

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

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

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

    转载:<JAVA与模式>之适配器模式 这个总结的挺好的,为了加深印象,我自己再尝试总结一下 1.定义: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法 ...

  9. JavaScript设计模式 Item9 --适配器模式Adapter

    适配器模式(转换器面模式),通常是为要使用的接口,不符本应用或本系统使用,而需引入的中间适配层类或对象的情况. 适配器模式的作用是解决两个软件实体间的接口不兼容的问题. 一.定义 适配器模式(Adap ...

随机推荐

  1. navicat for mysql 导入SQL Server显示中文乱码解决办法

    解决方法是在navicat里右击一个连接,选择连接属性,切换到高级选项卡,去掉“使用mysql字符集”前的对勾,在编码里选择utf-8

  2. Java发送短信

    1.接口使用介绍 发送短信肯定需要使用第三方接口,Java本身是肯定不能直接发送短信的.第三方接口有很多,这里直接找个正规靠谱一点的学习一下 这里使用了中国网建(http://sms.webchine ...

  3. Linux下的软件的安装

     一.yum相关介绍及命令 [1] 用来管理软件的一个命令.通过该命令完成对软件的下载.卸载等操作. [2] 命令:(必须在yum搭建成功后才能正常运行) yum  clean all      清楚 ...

  4. keras系列︱keras是如何指定显卡且限制显存用量

    keras在使用GPU的时候有个特点,就是默认全部占满显存. 若单核GPU也无所谓,若是服务器GPU较多,性能较好,全部占满就太浪费了. 于是乎有以下三种情况: - 1.指定GPU - 2.使用固定显 ...

  5. Jmter操作数据库

    1.导入jdbc的jar包,因为jmeter本身不能直接连接mysql,所以需要导入第三方的jar包,来连接mysql,如下操作: 2.创建数据库连接如下: 3.配置mysql的url.端口号.账号. ...

  6. linux c++ 服务器端开发面试必看书籍

    摘自别人博客,地址:http://blog.csdn.net/qianggezhishen/article/details/45951095 打算从这开始一本一本开始看 题外话: 推荐一个 githu ...

  7. Scala函数式编程——近半年的痛并快乐着

    从9月初啃完那本让人痛不欲生却又欲罢不能的<七周七并发模型>,我差不多销声匿迹了整整4个月.这几个月里,除了忙着讨食,便是继续啃另一本"锯著"--<Scala函数 ...

  8. 【剑指offer】扑克牌的顺子,C++实现

    # 题目 # 思路 顺子满足的条件: 数组长度必须为5 除0外没有重复的牌(0表示大小王) 顺子中最大值和最小值的差值小于5 # 代码 #include <iostream> #inclu ...

  9. BZOJ2160 拉拉队排练【Manacher】

    Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训 ...

  10. Robot Framework-断言函数

    测试用例的目的是要验证一些操作否符合我们的预期结果,所以在测试用例中,断言函数是必不可少的一项.我们做的每一步操作都会有预期的结果,为了保证操作得到的结果符合预期,我们需要在测试用例中添加断言,来保证 ...