适配器(Adapter)设计模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38737992/article/details/89405311

1. 概述

适配器(Adapter)设计模式用于解决现有的程序无法直接使用,需要做适当的变换才能使用的情况,这种用于填补“现有程序”和“所需程序”之间的差异就是适配器。

例:你的电脑充电器就是一个适配器,你的电脑需要几十伏直流的电,而我们家庭常用是220V的交流电,这就需要你的电脑充电器充当适配器,电脑充电器用于填补“220V的交流电”和“电脑所需几十伏直流的电”之间的差异。

适配器设计模式两种:类适配器模式(使用继承)、对象适配器模式(使用委托)。

2. 类适配器

所需类去继承实际类,所需类就是“所需程序”,实际类就是“现有程序”。

实际类,real.java:

package adapter;

public class Real {

    private String string;

    public Real(String string) {
        this.string = string;
    }

    public void show1() {
        System.out.println("***" + string + "***");
    }

    public void show2() {
        System.out.println("###" + string + "###");
    }
}

所需类的接口,Need.java:

package adapter;

public interface Need {
    public void showNeed1();
    public void showNeed2();
}

所需类(适配器),继承real.java,实现Need.java:

package adapter;

public class Real {

    private String string;

    public Real(String string) {
        this.string = string;
    }

    public void show1() {
        System.out.println("***" + string + "***");
    }

    public void show2() {
        System.out.println("###" + string + "###");
    }
}

测试类,test.java :

package adapter;

public class test {
    public static void main(String args[]) {
        Need need = new NeedImpl("Adapter");
        need.showNeed1();
        need.showNeed2();
    }
}

运行截图:

2. 对象适配器模式

对象适配器模式使用的是委托,委托:让别人帮自己做事,自己不去实现。所需类的委托,通过把实际类当成自己的一个成员变量,通过调用这个成员变量来调用具体方法。

修改Need类为一个抽象类:

package adapter;

public abstract class Need {
    public abstract void showNeed1();
    public abstract void showNeed2();
}

修改NeedImpl(所需类),NeedImpl继承Need类,并将Real类(实际类)添加成为自己的成员变量。

package adapter;

public class NeedImpl extends Need {
    private Real real;

    public NeedImpl(String string) {
        this.real = new Real(string);
    }

    public void showNeed1() {
        this.real.show1();
    }
    public void showNeed2() {
        this.real.show2();
    }
}

运行测试类:

参考文献:

  • 图解设计模式 - 结成浩著、杨文轩译 - 人民邮电出版社

猜你喜欢

转载自blog.csdn.net/qq_38737992/article/details/89405311