2019独角兽企业重金招聘Python工程师标准>>>

定义:
将两个不兼容的类纠合在一起使用,属于结构型模式,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份.

eg:

假设我们要打桩,有两种类:方形桩 圆形桩.
public class SquarePeg{
  public void insert(String str){
    System.out.println("SquarePeg insert():"+str);
  }

}

public class RoundPeg{
  public void insertIntohole(String msg){
    System.out.println("RoundPeg insertIntoHole():"+msg);
}
}

现在有一个应用,需要既打方形桩,又打圆形桩.那么我们需要将这两个没有关系的类综合应用.假设RoundPeg我们没有源代码,或源代码我们不想修改,那么我们使用Adapter来实现这个应用:

public class PegAdapter extends SquarePeg{

  private RoundPeg roundPeg;

  public PegAdapter(RoundPeg peg)(this.roundPeg=peg;)

  public void insert(String str){ roundPeg.insertIntoHole(str);}

}

在上面代码中,RoundPeg属于Adaptee,是被适配者.PegAdapter是Adapter,将Adaptee(被适配者RoundPeg)和Target(目标SquarePeg)进行适配.实际上这是将组合方法(composition)和继承(inheritance)方法综合运用.

PegAdapter首先继承SquarePeg,然后使用new的组合生成对象方式,生成RoundPeg的对象roundPeg,再重载父类insert()方法。从这里,你也了解使用new生成对象和使用extends继承生成对象的不同,前者无需对原来的类修改,甚至无需要知道其内部结构和源代码.

如果你有些Java使用的经验,已经发现,这种模式经常使用。

进一步使用
上面的PegAdapter是继承了SquarePeg,如果我们需要两边继承,即继承SquarePeg 又继承RoundPeg,因为Java中不允许多继承,但是我们可以实现(implements)两个接口(interface)

public interface IRoundPeg{
  public void insertIntoHole(String msg);

}

public interface ISquarePeg{
  public void insert(String str);

}

下面是新的RoundPeg 和SquarePeg, 除了实现接口这一区别,和上面的没什么区别。
public class SquarePeg implements ISquarePeg{
  public void insert(String str){
    System.out.println("SquarePeg insert():"+str);
  }

}

public class RoundPeg implements IRoundPeg{
  public void insertIntohole(String msg){
    System.out.println("RoundPeg insertIntoHole():"+msg);
  }
}

下面是新的PegAdapter,叫做two-way adapter:

public class PegAdapter implements IRoundPeg,ISquarePeg{

  private RoundPeg roundPeg;
  private SquarePeg squarePeg;

  // 构造方法
  public PegAdapter(RoundPeg peg){this.roundPeg=peg;}
  // 构造方法
  public PegAdapter(SquarePeg peg)(this.squarePeg=peg;)

  public void insert(String str){ roundPeg.insertIntoHole(str);}

}

转载于:https://my.oschina.net/u/219582/blog/59456

设计模式之Adapter相关推荐

  1. 设计模式之Adapter设计模式

    这个设计模式是我这两天刚学的,这儿算是我的读书笔记发布出来是供大家一起学习,后面有我自己的感悟,下面是我网上整理的 以下情况使用适配器模式 • 你想使用一个已经存在的类,而它的接口不符合你的需求. • ...

  2. C++设计模式之Adapter

    一.功能 将一个类的接口转换成客户希望的另外一个接口,解决两个已有接口之间不匹配的问题.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 二.结构图 (1)class ad ...

  3. 浅谈设计模式之五——Adapter模式

    这一节开始谈谈结构型模式.结构型模式包括:**适配器.桥接.组成.装饰.外观.享元.代理模式**7种设计模式.这一节说一下适配器模式,适配器模式可以分为类适配器和对象适配器,类适配器其实就是多继承,一 ...

  4. 3.设计模式--适配器模式(adapter模式)

    1.场景 适配器模式可能是开发人员用的最多的一种设计模式,做后台开发你可能每天都在使用.只是不知道他的名字:现实中的适配器你应该不会陌生,新款的IQOO 8 pro手机充电器已经达到了120w,实际上 ...

  5. 设计模式02——Adapter模式

    定义 适配器设计模式,顾名思义就是将适配器的作用总结抽象成为一种代码的组织方式,将现有的代码通过适配器进行适配,以满足项目对另外一个类或者接口的要求.换句话说就是将一个类的接口适配(包装/转换)成客户 ...

  6. 设计模式笔记——Adapter

    适配器模式Adapter 将一个类的接口转换成用户希望的另外一个接口.适配器模式主要应用于希望复用一些现存的类,但是接口又与复用的环境要求不一样的情况. package adapter.pattern ...

  7. C#设计模式——适配器模式(Adapter Pattern)

    一.概述 在软件开发中,常常会想要复用一个已经存在的组件,但该组件的接口却与我们的需要不相符,这时我们可以创建一个适配器,在需复用的组件的接口和我们需要的接口间进行转换,从而能够正常的使用需复用的组件 ...

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

    定义: 将两个不兼容的类纠合在一起使用,属于结构型模式,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份. 为何使用? 我们经常碰到要将两个没有关系的类组合在一起使用,第一解决方案是 ...

  9. 设计模式--适配器(Adapter)模式

    模式定义 将一个类的接口转换成客户希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 类图 应用场景 1.当你希望使用某些现有类,但其接口与你的其他代码不兼容时: 2 ...

  10. Java设计模式-适配器模式Adapter

    定义:"转换接口" 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 我理解的"一个类的接口&q ...

最新文章

  1. python编程语言继承_python应用:学习笔记(Python继承)
  2. C++ String转int
  3. boost::geometry::srs::projection用法的测试程序
  4. 计算机用并行传输还是串行,网线RJ45是并行传输还是串行
  5. nagios-3.4.3搭建
  6. dropMenu----简单的下拉菜单生成器
  7. oracle中sequence详解
  8. python编程(关于cocos2d)
  9. 排序算法之 插入排序
  10. 连接访问数据库的技术方法
  11. excel行列互换_Excel中选择性粘贴的5种用法,别再仅仅复制-粘贴了
  12. python 对接萤石云,录制可播放的MP4视频
  13. Flash ANE打包
  14. 解决typora 或markdown文档图片失效问题
  15. 模型蒸馏探索(Bert)
  16. rsa1024 公钥c语言程序,两种方式生成RSA 公钥私钥
  17. 数据结构——左高树(C语言)
  18. 牛客网编程题之多行输入思路
  19. 2021-02-15:给定一个整型数组arr,代表数值不同的纸牌排成一条线。玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿。但是每个玩家每次只能拿走最左或最右的纸牌,玩家A和玩家B都绝顶聪
  20. 佛山的车主们,为什么说跑优步比滴滴更赚钱?

热门文章

  1. eoiioe linux下解压命令大全
  2. 属性文件有一个多行值
  3. django model数据 时间格式
  4. python 使用标准库连接linux实现scp和执行命令
  5. css垂直居中如何实现
  6. ajax实现highchart与数据库数据结合完整案例分析(三)---柱状折线图
  7. 第三方登录(QQ登录)开发流程详解
  8. 使用浏览器cookie
  9. C++中函数模板template和函数参数为指针,且有返回值的结合使用
  10. 手把手教你做关键词匹配项目(搜索引擎)---- 第六天