设计模式学习心得<适配器 Adapter>

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。

概述


  • 意图

    将一个类的接口转换成客户希望的另外一个接口。

    适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

  • 主要解决

    主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。

  • 何时使用
  1. 系统需要使用现有的类,而此类的接口不符合系统的需要。
  2. 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。
  3. 通过接口转换,将一个类插入另一个类系中。

    (比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。)

  • 如何解决

    继承或依赖(推荐)。

  • 关键代码

    适配器继承或依赖已有的对象,实现想要的目标接口。

  • 应用实例
  1. 美国电器 110V,中国 220V,就要有一个适配器将 110V 转化为 220V。
  2. JAVA JDK 1.1 提供了 Enumeration 接口,而在 1.2 中提供了 Iterator 接口,想要使用 1.2 的 JDK,则要将以前系统的 Enumeration 接口转化为 Iterator 接口,这时就需要适配器模式。
  3. 在 LINUX 上运行 WINDOWS 程序。
  4. JAVA 中的 jdbc。
  • 优点
  1. 可以让任何两个没有关联的类一起运行。
  2. 提高了类的复用。
  3. 增加了类的透明度。
  4. 灵活性好。
  • 缺点
  1. 过多地使用适配器,会让系统非常零乱,不易整体进行把握。

    比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。

  2. 由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。
  • 使用场景

    有动机地修改一个正常运行的系统的接口,这时应该考虑使用适配器模式。

  • 注意事项

    适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。

实现


  • 适配器模式有如下三个角色

    Target:目标抽象类

    Adapter:适配器类

    Adaptee:适配者类

  • step 1

    需要一个Adaptee接口:Robot.java。提供cry()run()方法。

     public interface Robot {
     void cry();
    
     void move();
     }
  • step 2

    实现Adaptee接口:BioRobot.java。它可以叫和慢慢跑

    ```

    public class BioRobot implements Robot{

    public void cry() {

    System.out.println("仿生机器人叫.....");

    }

    public void move() {

    System.out.println("仿生机器人慢慢移动....");

    }

}

- step 3
需要```Target```类:```Dog.java```。它可以汪和快跑

public class Dog {

public void wang(){

System.out.println("小狗叫:汪汪.....");

}

 public void run(){
     System.out.println("小狗快快跑......");
 }

}

- step 4
轮到重点啦:适配器```Adapter```,这个适配器能够使仿生机器人像狗一样叫,一样跑。

public class DogAdapter implements Robot{

Dog dog;

public DogAdapter(Dog dog){ //取得要适配的对象的引用

this.dog = dog;

}

 /
  * 实现接口中的方法,只需要在相应的方法间进行转换即可完成。
  */
 public void cry() {
     System.out.println("机器人模拟狗叫...");
     dog.wang();
 }

 public void move() {
     System.out.println("机器人模拟狗跑...");
     dog.run();
 }

}

```

原文地址:https://www.cnblogs.com/snifferhu/p/9174289.html

时间: 2024-08-03 03:37:04

设计模式学习心得<适配器 Adapter>的相关文章

设计模式学习心得----开篇

做了几年的开发工作,还停留在开发工程师的阶段,想着不能一直这样下去,觉得要为自己以后做打算了,开发常规两条路:项目管理,架构师,我选择架构师.之 所以这样选,这是保守的一个选择,用格力的广告“掌握核心科技”,只有掌握了核心技术,核心业务,才能占据主导角色.当然要成为一个合格的架构师,需要学 习的,掌握的东西要非常多,非常全面,也有很多条件,但这是我选架构师的一个最重要条件.既然已经决定了,就要学习自己欠缺的.设计模式就是之一,于是有 了这系列文章,记录学习过程中一些心得和总结. 一:为什么要用设

大话设计模式学习心得

我的理解是建立在C++上的,而书中所用的例子是java的,每一种模式我都会转化为C++中的应用来理解. 1.简单工厂模式: 我的理解是父类定义接口,子类实现接口,外加一个根据输入产生不同子类的函数.如果需要添加新实现时,需要添加子类,和修改工厂函数. 2.策略模式: 简单一点的理解是将工厂函数和父类定义在一个新的类中,那么客户端的代码就会显得简洁一些.比较重要的一点是接口和客户端的耦合度降低了.两个类改为一个类. 3.单一职责原则: 还是耦合度的问题,如果太多的功能集中在一个类中,成员变量数量的

Android学习之适配器Adapter

Adapter是个什么角色呢?其实它的作用就是View界面和数据之间的桥梁.我们可以看作是界面数据绑定的一种理解,它所操纵的数据一般都是一些比较复杂的数据,如数组,链表,数据库,集合等. 常用的适配器有: (1)ArrayAdapter:             数组作为数据源,填充的是ArrayAdapter (2)SimpleAdapter:           List作为数据源,填充的是SimpleAdapter (3)SimpleCursorAdapter: 数据来源一般都是数据库查询

java常用设计模式学习心得

学习自:http://shenzhenchufa.blog.51cto.com/730213/161581 代码来自:http://shenzhenchufa.blog.51cto.com/730213/161581 感谢博主:shenzhenchufa. 学习之余我写一些自己的心得.无心侵犯版权,用于自己学习. ------------------------- strategy(策略模式) -------------------------我们有一个设计原则:找出应用中相同之处,且不容易发生

设计模式学习心得(持续更新)

本博文仅仅是笔者自己的学习路线,归纳整理了一些好的设计模式资料. 1.策略模式 参考资料:c#设计模式-策略模式?c#设计模式之策略模式 ?C#设计模式(20)--策略者模式(Stragety Pattern) 策略模式的实现有解耦的表现--Context类 注意: 如果优化的话,可以使用抽象类,将变化的算法设为抽象方法,或虚方法,这样让子类对该方法进行实现即可,同样可以实现该需求,而且代码重用性应该会更好 2.工厂模式 参考资料:C#设计模式(3)--工厂方法模式 ?C#设计模式(1)--简单

设计模式学习心得&lt;外观模式 Facade&gt;

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性. 这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用. 概述 意图 为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 主要解决 降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口. 何时使用 客户端不需要知道系统

设计模式学习心得&lt;组合模式 Composite&gt;

组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及整体层次.这种类型的设计模式属于结构型模式,它创建了对象组的树形结构. 这种模式创建了一个包含自己对象组的类.该类提供了修改相同对象组的方式. 概述 意图 将对象组合成树形结构以表示"部分-整体"的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. 主要解决 它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客

大话设计模式学习心得2

1.迪米特法则 类之间的联系越少越好, 2.外观模式 添加一个新的类,包含子类,实现不同的组合,降低与外界的耦合,对旧代码的更新可以适用. 3.建造者模式 和外观模式有些类似吧,实现子类的各种不同的组合,也就是在内部实现接口调用顺序,而在外界只需调用具体的接口. 4.观察者模式 一个类A是观察者类,另一个类B是通知者类,B中调用A的接口,A中有B的通知号,其实耦合度还是很高的,只是有一个事件来到时,B主动调用注册在A中的方法.相当于实现了通知

设计模式学习心得4

1.组合模式 定义一个父类,其中包括所有子类的方法接口,那么对于任何一个子类来说对外界都是封闭的,外界只调用父类的接口,而不知道子类是否有实现. 2.迭代器模式 这个很常见,在C++中常常会用在标准模版类中,它的功能就是遍历一个类中的成员,而外界不知道对象的成员. 3.单例模式 这个模式就是为了只有一个实例,解决方式是将构造函数设置为私有函数,类的实例化使用一个共有静态函数接口.