设计模式(Design Patterns)适配器模式(Adapt

2018-01-18  本文已影响21人  万总有点菜

适配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。

类的适配器模式

场景:将一个类转换成满足另一个新接口的类。
可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可。


public class Source {

    public void method1(){
        System.out.println("Source method1");
    }
}
public interface Targetable {
    public void method1();
    public void method2();
}
public class Adapter extends Source implements Targetable{

    public void method2() {
        System.out.println("Adapter method2");
    }
}
public class AdapterTest {

    public static void main(String[] args){
        Targetable targetable = new Adapter();
        targetable.method1();
        targetable.method2();
    }
}

运行



Targetable接口的实现类具有了Source类的功能。

对象的适配器模式

场景:将一个对象转换成满足另一个新接口的对象。
可以创建一个Wrapper类,持有原类的一个实例,在Wrapper类的方法中,调用实例的方法。


public class Wrapper implements Targetable {

    private Source source;

    public Wrapper(Source source) {
        this.source = source;
    }

    public void method1() {
        source.method1();
    }

    public void method2() {
        System.out.println("Wrapper method2");
    }
}
public class AdapterTest {

    public static void main(String[] args){
//        Targetable targetable = new Adapter();
//        targetable.method1();
//        targetable.method2();
        Source source = new Source();
        Targetable targetable = new Wrapper(source);
        targetable.method1();
        targetable.method2();
    }
}

运行


接口的适配器模式

场景:不希望实现一个接口中所有的方法。
可以创建一个抽象类Wrapper,实现所有方法,需要的类继承抽象类即可。


public interface Sourceable {
    public void method1();
    public void method2();
}
public abstract class AbstractWrapper implements Sourceable{
    public void method1(){}
    public void method2(){}
}
public class SourceSub1 extends AbstractWrapper {
    @Override
    public void method1() {
        System.out.println("SourceSub1 method1");
    }
}
public class SourceSub2 extends AbstractWrapper {
    @Override
    public void method2() {
        System.out.println("SourceSub2 method2");
    }
}
public class AdapterTest {

    public static void main(String[] args){
        Sourceable sourceable1 = new SourceSub1();
        Sourceable sourceable2 = new SourceSub2();
        sourceable1.method1();
        sourceable1.method2();
        sourceable2.method1();
        sourceable2.method2();
    }
}

运行


上一篇下一篇

猜你喜欢

热点阅读