• 夜话JAVA设计模式之适配器模式(adapter pattern)


    适配器模式:将一个类的接口,转换成客户期望的另一个接口,让不兼容的接口变成兼容。

    1.类适配器模式:通过多重继承来实现适配器功能。多重继承就是先继承要转换的实现类,再实现被转换的接口。

    2.对象适配器模式:通过组合来实现适配器。

           

    什么是适配器模式?或者说适配器模式有什么作用呢?上面已经定义的很清楚了。下面我们再用一张草图来更形象的描述这一设计模式。

           这确实是一张草图,图中1就好比我们的普通耳机接口,3就好比苹果手机接口,2就好比耳机转接头,只有这样苹果手机才能使用普通耳机,模块2就相当于一个适配器。

           对于我们程序中的代码来说,1是我们自己系统的接口,3是其他厂家的系统接口,2就是我们为了对接这两个系统加的适配器。这样就不至于修改1,3部分的代码。

           适配器工作看起来就像一个中间人,那么让我们来看看具体JAVA代码的表述:

    耳机3.5mm接口:

    /**
     * 耳机 : 3.5mm接口
     * @author monkjavaer
     * @date 2018/08/29 21:32
     */
    public interface Is35mmEarPhone {
    
        /**
         * 这是3.5mm接口耳机
         */
        void is35mmEarPhone();
    
    }
    

      

    type-C接口:

    /**
     * type-C接口
     * @author monkjavaer
     * @date 2018/08/29 21:29
     */
    public interface TypeC {
    
        /**
         * type-C接口
         */
        void isTypeC();
    }
    

      

    华为某款手机类实现type-c接口:

    /**
     * 手机Type-c接口
     * @author monkjavaer
     * @date 2018/08/29 21:45
     */
    public class PhoneTpyeC implements TypeC {
    
        @Override
        public void isTypeC() {
            System.out.println("我是手机Type-C接口");
        }
    }
    

      

    那么问题来了,怎么让只有type-c接口的华为手机能使用3.5mm接口的耳机呢?当然是适配器模式了。

    类适配器模式:

    /**
     * 耳机3.5mm接口转换为Type-C接口的适配器
     *
     * 类适配器模式:通过多重继承来实现适配器功能。多重继承就是先继承要转换的实现类,再实现被转换的接口。
     * @author monkjavaer
     * @date 2018/08/29 21:47
     */
    public class ClassAdapter extends PhoneTpyeC implements Is35mmEarPhone {
    
    
        @Override
        public void is35mmEarPhone() {
            isTypeC();
        }
    }
    

      

    test:

    /**
     * 通过适配器将3.5mm接口转换为type-c接口
     * @author monkjavaer
     * @date 2018/08/29 22:11
     */
    public class ClassAdapterTest {
    
        public static void main(String[] args) {
    
            Is35mmEarPhone is35mmEarPhone = new ClassAdapter();
            is35mmEarPhone.is35mmEarPhone();
    
        }
    
    }
    

      

    输出:我是手机Type-C接口.

    对象适配器模式:

    /**
     * 耳机3.5mm接口转换为Type-C接口的适配器
     *
     * 对象适配器模式:通过组合来实现适配器
     * @author monkjavaer
     * @date 2018/08/29 22:14
     */
    public class ObjectAdapter implements Is35mmEarPhone{
    
        TypeC typeC;
    
        public ObjectAdapter(TypeC typeC) {
            this.typeC = typeC;
        }
    
        @Override
        public void is35mmEarPhone() {
            typeC.isTypeC();
        }
    }
    

      

    test:

    /**
     * 通过适配器将3.5mm接口转换为type-c接口
     * @author monkjavaer
     * @date 2018/08/29 22:19
     */
    public class ObjectAdapterTest {
    
        public static void main(String[] args) {
            Is35mmEarPhone is35mmEarPhone = new ObjectAdapter(new PhoneTpyeC());
            is35mmEarPhone.is35mmEarPhone();
        }
    }
    

      

    输出:我是手机Type-C接口

  • 相关阅读:
    iOS开发之友盟分享的使用
    iOS开发之AFNetworking开源库的使用
    iOS开发之网络基础知识
    iOS开发之Block
    iOS开发之数据库FMDB
    iOS开发常用的网站
    iOS开发之下拉刷新和上拉加载更多
    iOS开发之XML解析
    iOS之网络数据下载和JSON解析
    Linux 部署项目经验总结
  • 原文地址:https://www.cnblogs.com/monkjavaer/p/9569259.html
Copyright © 2020-2023  润新知