专栏首页醉程序设计模式学习 - 适配器模式

设计模式学习 - 适配器模式

学习、梳理设计模式。

适配器模式

不兼容的转换为兼容的,为解决兼容问题而生。

实现方式可分为组合方式和继承方式。

举个例子,充电宝只能用二相电供电,但现在只有三相电该怎么办呢?

三相电实例

/**
 * 三相电
 */
public class ThreePlug {

    public void powerWithThree() {
        System.out.println("使用三相供电");
    }
}

二相电接口

/**
 * 二相接口
 */
public interface TwoPlugInterface {

    /**
     * 二相电流供电
     */
    void powerWithTwo();
}

充电宝

/**
 * 充电宝
 */
public class PowerBank {

    /**
     * 需要二相供电
     */
    private TwoPlugInterface twoPlugInterface;

    public PowerBank(TwoPlugInterface twoPlugInterface) {
        this.twoPlugInterface = twoPlugInterface;
    }

    public void power() {
        twoPlugInterface.powerWithTwo();
    }
}

组合方式

我们来定义个三相适配器(接收三相电,对外提供二相电)。

public class ThreePlugAdapter implements TwoPlugInterface {

    private ThreePlug threePlug;

    public ThreePlugAdapter(ThreePlug threePlug) {
        this.threePlug = threePlug;
    }

    @Override
    public void powerWithTwo() {
        threePlug.powerWithThree();
    }

}

测试一把

public class PowerBankTest {

    public static void main(String[] args) {

        // 现在只有三相电
        ThreePlug threePlug = new ThreePlug();

        // 通过三相转二相适配器进行转换
        TwoPlugInterface twoPlugInterface= new ThreePlugAdapter(threePlug);

        PowerBank powerBank = new PowerBank(twoPlugInterface);
        powerBank.power();
    }

}

输出

使用三相供电

继承方式

继承的方式从代码上来看比较简洁

public class ThreePlugAdapter extends ThreePlug implements TwoPlugInterface {

    @Override
    public void powerWithTwo() {
        this.powerWithThree();
    }

}

测试一把

public class PowerBankTest {

    public static void main(String[] args) {

        TwoPlugInterface twoPlugInterface = new ThreePlugAdapter();
        PowerBank powerBank = new PowerBank(twoPlugInterface);
        powerBank.power();

    }

输出

使用三相供电

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 设计模式学习 - 工厂模式

    根据不同的对象,提供不同的工厂,然后由客户端来选择对应的工厂。这也是与简单工厂模式的不同的地方。

    许杨淼淼
  • 设计模式学习 - 策略模式

    一个背景,CRM系统内有多种帐号体系:手机号注册的客户、微信授权的客户、微博授权的客户。 一个场景,需要把这些不同帐号体系的ID转换为CRM系统内部的统一Us...

    许杨淼淼
  • 设计模式学习 - 模版方法模式

    模版方法模式,以继承的方式来实现,提升代码的复用性,适合具有相同或相似的步骤的逻辑处理。

    许杨淼淼
  • 【设计模式-工厂相关模式】

    定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行。

    Liusy
  • 浅析类装载 顶

    [Loaded com.guanjian.Parent from file:/E:/classload/out/production/classload/] ...

    算法之名
  • 生成器模式builder

    生成器模式即建造者模式builder,是创建型的设计模式,主要的目的是封装一个对象的构造过程,并运行按步骤构造,我们所熟知的StringBuilder和Stri...

    黑白格
  • 自己平时用到的设计模式总结

    作为对象的创建模式,单例模式确保其某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类。单例模式有以下特点:

    小勇DW3
  • 设计模式 接口隔离原则

    接着,要进行更改了。对好看的定义,发生了改变,那么就应该改变PettyGirl中的内容,但是已经在接口中定义了。那么就有问题了。即,接口承担的内容过多导致

    mySoul
  • Java-策略设计模式

    今天 我们来学习一下策略模式,什么是策略模式呢?比如我们一个功能的实现可以有多个策略去选择,比如:出行方式可以选择:共享单车,拼车,私家车,出租等。如果将这个出...

    android_薛之涛
  • 设计模式

    静态内部类实现方式(也是一种赖加载方式) public class SingletonDemo04 { private static class Singl...

    海仔

扫码关注云+社区

领取腾讯云代金券