【Java设计模式】适配器模式

    科技2022-07-15  118

    一、设计原则

    开闭原则(Open Close Principle)里氏代换原则(Liskov Substitution Principle)依赖倒转原则(Dependence Inversion Principle)接口隔离原则(Interface Segregation Principle)单一职责原则(Single Responsibility Principle)最少知道原则(Demeter Principle)合成复用原则(Composite Reuse Principle)

    参考: 1、设计原则概念 2、23设计原则示例+讲解

    二、适配器模式

    场景: 假设现在你处于中国使用国标充电器进行充电、这时你需要使用一个国标充电的接口(协议、契约)+实现接口(满足协议)的国标充电类,然后再设一个此场景的类进行使用此充电器进行充电;

    此后,你有了一个iphone需要英标的充电器进行充电,国标无法满足,此时就需要一个适配器来进行转换(相当于桥梁的作用),那么怎么做呢?? 第一步:获取英标的协议 第二步:来一个英标的充电器(实现协议) 第三步:进行适配 (实现国标协议的适配类,那么和国标的充电器类有什么区别呢,那就是需要将国标充电的方法重写为英标的充电方法)

    示例代码:

    package com.company.adapterpattern; // 国标的充电协议(接口) interface CnPluginInterface{ void chargeWith2Pins(); } // 国标充电(原有的) class CnPlugin implements CnPluginInterface{ @Override public void chargeWith2Pins() { System.out.println("charge with CnPlugin.."); } } // 在中国家里进行充电 class Home{ // private CnPluginInterface cnPlugin; public Home(){} public Home(CnPluginInterface cnPlugin){ this.cnPlugin= cnPlugin; } public void setPlugin(CnPluginInterface cnPlugin){ this.cnPlugin = cnPlugin; } public void charge(){ //用国标进行充电 cnPlugin.chargeWith2Pins();; } } // 适配器 interface EnPluginInterface{ void chargeWith3pins(); } class EnPlugin implements EnPluginInterface{ @Override public void chargeWith3pins() { System.out.println("charge with EnPlugin"); } } //进行对cn接口的适配 class cnPluginAdapter implements CnPluginInterface{ private EnPluginInterface enPlugin; public cnPluginAdapter(EnPluginInterface enPlugin){ this.enPlugin= enPlugin; } @Override public void chargeWith2Pins() { enPlugin.chargeWith3pins(); } } public class CnTest { public static void main(String[]args){ // 进行国标充电 CnPluginInterface cnPlugin = new CnPlugin(); Home home = new Home(); home.setPlugin(cnPlugin); home.charge(); // 进行适配之后 EnPluginInterface enPlugin = new EnPlugin(); cnPluginAdapter pluginAdapter = new cnPluginAdapter(enPlugin); home.setPlugin(pluginAdapter); home.charge(); } } /* 场景: 在家中充电需要使用二插座进行充电; 但现在需要使用英标进行充电就需要一个适配器进行转换充电(英标就是一个过渡的适配) 二插座充电:二插座协议、二插座充电、home类 三插座:三插座协议和充电类、适配器进行二插座到三插座过渡适配(也就是对应的方法重写) */
    Processed: 0.011, SQL: 8