美文网首页Java基础Android
[设计模式]适配器模式

[设计模式]适配器模式

作者: Merbng | 来源:发表于2020-03-16 15:30 被阅读0次

定义

  • 将某个类的接口转换成客户期望的另一个接口表示,使因为接口不兼容导致不能在一起工作的某些类能在一起工作。
  • 别名为包装器
  • 根据适配器类与适配者的关系的不同,可分为对象适配器和类适配器
  • 在对象适配器中,适配器与适配者是 关联关系
  • 在类适配器中,适配器与适配者是 继承(或实现)关系

例子

就拿日本电饭煲的例子进行说明,日本电饭煲接口标准是110v电压,而中国标准电压接口是220v,所以想要在中国用日本电饭煲,就需要一个电源转换器


/**日本11v 电源接口
 * Created by merbng on 2020/3/14.
 */

public interface JP110VInterface {
      void connect();
}


/**
 * 日本110v 电源
 * Created by merbng on 2020/3/14.
 */

public class JP110VInterfaceImpl implements JP110VInterface {
    @Override
    public void connect() {
        Log.e("", "日本110V电源开始工作...");
    }
}


/**中国220v 电源接口
 * Created by merbng on 2020/3/14.
 */

public interface China220VInterface {
    public void connect();
}

/**
 * 中国220v 电源
 * Created by merbng on 2020/3/14.
 */

public class China220VInterfaceImpl implements China220VInterface {
    @Override
    public void connect() {
        Log.e("==设计模式:适配器模式==", "中国220V电源开始工作...");
    }
}


/**
 * 电饭煲
 * Created by merbng on 2020/3/14.
 */

public class ElectricCooker {
    private JP110VInterface jp110VInterface;

    public ElectricCooker(JP110VInterface jp110VInterface) {
        this.jp110VInterface = jp110VInterface;
    }

    public void work() {
        jp110VInterface.connect();
        Log.e("==设计模式:适配器模式==","电饭煲开始工作...");
    }
}



/**
 * Created by merbng on 2020/3/14.
 */

public class PowerAdapter implements JP110VInterface {
    China220VInterface china220VInterface;

    public PowerAdapter(China220VInterface china220VInterface) {
        this.china220VInterface = china220VInterface;
    }

    @Override
    public void connect() {
        china220VInterface.connect();
    }
}



public class AdapterModeTest extends Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        China220VInterface china220VInterface = new China220VInterfaceImpl();
        PowerAdapter adapter = new PowerAdapter(china220VInterface);
        ElectricCooker electricCooker = new ElectricCooker(adapter);
        electricCooker.work();
    }
}

总结

主要优点:

  • 1.将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无需修改原有结构。
  • 2.增加了类的透明性和复用性,将具体的业务实现过程封装在适配者类中,对于客户端而言是透明的,而且提高了适配者的复用性,同一个适配者类可以在多个不同的系统中复用。
    1. 灵活性扩展性都非常好,通过使用配置文件,可以很方便的更换适配器,也可在不修改原有代码的基础上增加新的适配器,完全符合“开闭原则”

缺点:
过多的使用适配器会让系统显得过于凌乱,如果不是很远必要,可以不使用适配器而是直接对系统进行重构

参考链接:

相关文章

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

    前言:对于设计模式基础概念可以去看[简说设计模式之设计模式概述] 一、什么是适配器模式 适配器模式(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/bfpgehtx.html