美文网首页
设计模式(Design Patterns)适配器模式(Adapt

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

作者: 万总有点菜 | 来源:发表于2018-01-18 20:00 被阅读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();
        }
    }
    

    运行


    相关文章

      网友评论

          本文标题:设计模式(Design Patterns)适配器模式(Adapt

          本文链接:https://www.haomeiwen.com/subject/obzwoxtx.html