美文网首页
设计模式-结构型模式之适配器模式

设计模式-结构型模式之适配器模式

作者: gooddaytoyou | 来源:发表于2019-02-15 15:39 被阅读0次

定义

适配器模式(Adapter Pattern) :将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。

相关角色
Target:目标抽象类
Adapter:适配器类
Adaptee:适配者类
Client:客户类

解决问题

使接口不兼容的那些类可以一起工作。

UML类图

adapter.png

例子

适配器分两种

  • 类的适配器
  • 对象适配器

具体场景是: 在生活中,我们买的电器插头是2个孔的,但是我们买的插座只有三个孔的,此时我们就希望电器的插头可以转换为三个孔的,这样我们就可以直接把它插在插座上,此时三个孔插头就是客户端期待的另一种接口,自然两个孔的插头就是现有的接口。

类的适配器

IThreeHole

public interface IThreeHole {
     void request();
}

TwoHole

public abstract class TwoHole {
    public void specificRequest()
    {
        System.out.println("我是两个孔的插头");
    }
}

PowerAdapter

public class PowerAdapter extends TwoHole implements IThreeHole {

    @Override
    public void request() {
        this.specificRequest();
    }

}

对象适配器

TwoHole

public class TwoHole {
    public void specificRequest() {
        System.out.println("我是两个孔的插头");
    }
}

ThreeHole

public abstract class ThreeHole {
    public abstract void request();
}

PowerAdapter

public class PowerAdapter extends ThreeHole {
    private TwoHole twoHole = new TwoHole();

    @Override
    public void request() {
        twoHole.specificRequest();
    }
}

优缺点

类的适配器模式

优点:

  • 可以在不修改原有代码的基础上来复用现有类,很好地符合 “开闭原则”;
  • 可以重新定义Adaptee(被适配的类)的部分行为,因为在类适配器模式中,Adapter是Adaptee的子类;
  • 仅仅引入一个对象,并不需要额外的字段来引用Adaptee实例(这个即是优点也是缺点)。
    缺点:
  • 用一个具体的Adapter类对Adaptee和Target进行匹配,当如果想要匹配一个类以及所有它的子类时,类的适配器模式就不能胜任了。因为类的适配器模式中没有引入Adaptee的实例,光调用this.SpecificRequest方法并不能去调用它对应子类的SpecificRequest方法;
  • 采用了 “多继承”的实现方式,带来了不良的高耦合。

对象的适配器模式

优点:

  • 可以在不修改原有代码的基础上来复用现有类,很好地符合 “开闭原则”(这点是两种实现方式都具有的);
  • 采用 “对象组合”的方式,更符合松耦合。
    缺点:
  • 使得重定义Adaptee的行为较困难,这就需要生成Adaptee的子类并且使得Adapter引用这个子类而不是引用Adaptee本身。

延伸

相关文章

  • JavaScript设计模式

    设计模式分类(23种设计模式) 创建型单例模式原型模式工厂模式抽象工厂模式建造者模式 结构型适配器模式装饰器模式代...

  • 最常用的设计模式---适配器模式(C++实现)

    适配器模式属于结构型的设计模式,它是结构型设计模式之首(用的最多的结构型设计模式)。 适配器设计模式也并不复杂,适...

  • iOS常用设计模式总结(一)

    设计模式大概分成三类: 1.创建型:单例设计模式、抽象工厂设计模式 2.结构型:MVC 模式、装饰器模式、适配器模...

  • 前篇

    一、常见的设计模式? 创建型:工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式 结构型:适配器模式、桥接...

  • 【设计模式】结构型设计模式汇总

    结构型设计模式汇总 结构型设计模式名称 结构型设计模式主要包括 7 大类: 代理模式 桥接模式 装饰器模式 适配器...

  • 设计模式纲要

    设计模式分3类: 创建型5种: 工厂方法模式,抽象工厂模式,单例模式,原型模式,建造者模式 结构型7种: 适配器模...

  • 设计模式之适配器模式

    设计模式之适配器模式 1. 模式定义 适配器模式又称包装器模式,属于结构型模式,它可以将一个接口转换成客户希望的另...

  • 简说设计模式之适配器模式

    前言:对于设计模式基础概念可以去看[简说设计模式之设计模式概述] 一、什么是适配器模式 适配器模式(Adapter...

  • [Python-设计模式] 结构型模式- 适配器模式

    适配器模式 适配器模式是一种结构型设计模式, 它能使接口不兼容的对象能够相互合作。 适配器模式结构 对象适配器 实...

  • iOS开发集锦之 2017.03.22(设计模式)

    1. 《结构型设计模式》之iOS系统框架实践 作者: 轻墨描述:适配器模式(Adapter); 组合模式(Comp...

网友评论

      本文标题:设计模式-结构型模式之适配器模式

      本文链接:https://www.haomeiwen.com/subject/tjapeqtx.html