美文网首页设计模式学习小结
设计模式小结-适配器模式

设计模式小结-适配器模式

作者: r09er | 来源:发表于2017-10-06 23:03 被阅读44次

适配器模式概述

笔记本电脑的工作电压是20V,而我国的家庭用电是220V,如何让20V的笔记本电脑能够在220V的电压下工作?答案是引入一个电源适配器(AC Adapter),俗称充电器或变压器,有了这个电源适配器,生活用电和笔记本电脑即可兼容,引入一个电源适配器一样引入一个称之为适配器的角色来协调这些存在不兼容的结构,这种设计方案即为适配器模式。

适配器模式优缺点

优点

    1. 一个对象适配器可以把多个不同的适配者适配到同一个目标
    1. 可以适配一个适配者的子类,由于适配器和适配者之间是关联关系,根据“里氏代换原则”,适配者的子类也可通过该适配器进行适配。

缺点

    1. 对于Java、C#等不支持多重类继承的语言,一次最多只能适配一个适配者类,不能同时适配多个适配者;
    1. 适配者类不能为最终类,如在Java中不能为final类,C#中不能为sealed类;
    1. 在Java、C#等语言中,类适配器模式中的目标抽象类只能为接口,不能为类,其使用有一定的局限性。

三种适配器模式

    1. 类适配器
    • 类适配器UML类图

由于Java不支持多继承,所以运用较少

    1. 对象适配器
    • 对象适配器UML类图

持有需要适配的目标对象,较为常用

    1. 接口适配器(缺省适配器)
    • UML类图

JDK中的WindowAdapter

示例

电脑的电源适配器和插座,使用适配器模式实现。

示例代码

//电脑类,设配目标(Target)
public  class Computer{

    public void connectWith20V(){
        System.out.println("20V充电");
    }
}
//插座,国内插座220V
public interface Socket {
    void supplyWith220V();
}
//类适配器模式
public class ChargerAdapter  extends Computer implements Socket {

    @Override
    public void supplyWith220V() {
        System.out.println("连接220V插座");
        super.connectWith20V();
    }
}
//对象适配器模式
public class Charger2Adapter implements Socket{
    private Computer computer;
    public Charger2Adapter(Computer computer) {
        this.computer = computer;
    }

    @Override
    public void supplyWith220V() {
        System.out.println("连接220V插座");
        computer.connectWith20V();
    }
}
//接口适配器(缺省适配器)
public class Charger3Adapter extends ComputerAdapter {

    private Computer computer;
    
    @Override
    public void supplyWith220V() {
        super.supplyWith220V();
    }

    public void connectWith20V() {
        this.supplyWith220V();
        computer.connectWith20V();
    }

    public void setComputer(Computer computer) {
        this.computer = computer;
    }
}
//调用
 public static void main(String[] args) {
//类适配器
//Socket socket = new ChargerAdapter();
//socket.supplyWith220V();

//对象适配器
//Computer computer = new Computer();
//Socket socket2 = new Charger2Adapter(computer);
//socket2.supplyWith220V();


//接口适配器(缺省适配器)
//Computer computer = new Computer();
//Charger3Adapter charger3Adapter = new Charger3Adapter();
//charger3Adapter.setComputer(computer);
//charger3Adapter.connectWith20V();


}

相关文章

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

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

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

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

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

  • iOS设计模式(5)策略模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(6)模板模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(7)建造者模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(4)抽象工厂模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(1)简单工厂模式

    设计模式系列文章 《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器模式》《iOS设计模式(4)抽象工厂...

  • iOS设计模式(2)工厂模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(3)适配器模式》《iOS设计模式(4)抽象...

  • iOS设计模式(8)外观模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

网友评论

    本文标题:设计模式小结-适配器模式

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