美文网首页
设计模式之旅8--适配器模式

设计模式之旅8--适配器模式

作者: 小楠总 | 来源:发表于2018-07-15 22:57 被阅读106次

    1. 定义

    适配器模式:把一个类的接口变换为客户端所期待的另一种接口,从而解决接口不兼容问题。

    适配器模式分为:类适配器模式、对象适配器模式,UML如下所示:

    类适配器模式、对象适配器模式

    2. 使用场景

    • 系统需要使用现有的类,而此类的接口不符合系统的需要,即接口不兼容。
    • 想要建立一个可以重复使用的类,用于一些彼此之间没有太大关联的一些类,包括一些将来可能会被引进的类一起工作。
    • 需要一个统一的输出接口,而输入端的类型不可预知。
    • Android中ListView、RecycleView等控件的设计就采用了适配器模式。

    3. 实现

    3.1 类适配器

    原角色:

    public class Adaptee {
        //原有的业务逻辑
        public void volt220() {
            System.out.println("220V电压");
        }
    }
    

    目标角色:

    public interface Target {
        void volt5();
    }
    
    public class ConcreteTarget implements Target {
        @Override
        public void volt5() {
            System.out.println("5V电压");
        }
    }
    

    适配器角色:

    public class Adapter extends Adaptee implements Target {
        @Override
        public void volt5() {
            System.out.println("5V电压");
        }
    
        public void volt220() {
            super.volt220();
        }
    }
    

    场景类:

    public class Client {
        public static void main(String[] args) {
            Target t1 = new ConcreteTarget();
            t1.volt5();
    
            Target t2 = new Adapter();
            t2.volt5();
        }
    }
    
    3.2 对象适配器(用得比较多)

    适配器角色(核心不同时:适配器角色持有了原角色):

    public class Adapter implements Target {
    
        private Adaptee mAdaptee;
    
        public Adapter(Adaptee adaptee) {
            mAdaptee = adaptee;
        }
    
        @Override
        public void volt5() {
            System.out.println("5V电压");
        }
    
        public void vol220() {
            mAdaptee.volt220();
        }
    }
    

    场景类:

    public class Client {
        public static void main(String[] args) {
            Target t1 = new ConcreteTarget();
            t1.volt5();
    
            Target t2 = new Adapter(new Adaptee());
            t2.volt5();
        }
    }
    

    4. 优点

    • 提高代码复用性:更好地复用现有的类,而并不需要大范围地重构代码
    • 更好的扩展性

    5. 缺点

    • 适配器模式过多地使用,系统会比较凌乱,不易把握。
    • 基于以上的观点,在重构能够解决的前提下,尽量不要使用适配器模式。

    相关文章

      网友评论

          本文标题:设计模式之旅8--适配器模式

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