美文网首页设计模式系列篇
设计模式系列篇(八)——适配器模式

设计模式系列篇(八)——适配器模式

作者: 复旦猿 | 来源:发表于2020-08-25 17:31 被阅读0次

    What

    适配器模式(Adaptor Design Pattern)是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。转接器就是一个非常形象的例子,可以连接不同的接口。

    Why

    1. 一般来说,适配器模式可以看作一种“补偿模式”,用来补救设计上的缺陷。应用这种模式实属“无奈之举”。如果在设计初期,我们就能协调规避接口不兼容的问题,那这种模式就没有应用的机会了。
    2. 其常用的场景有以下几种:
    • 封装有缺陷的接口设计
    • 统一多个类的接口设计
    • 替换依赖的外部系统
    • 兼容老版本接口
    • 适配不同格式的数据

    How

    适配器的实现方式有两种对象适配器和类适配器两种,基本结构如下:

    // 类适配器: 基于继承
    public interface ITarget {
        void f1();
    
        void f2();
    
        void fc();
    }
    
    public class Adaptee {
        public void fa() {
            // ...
        }
    
        public void fb() {
            // ...
        }
    
        public void fc() {
            // ...
        }
    }
    
    public class Adaptor extends Adaptee implements ITarget {
        public void f1() {
            super.fa();
        }
    
        public void f2() {
            // 重新实现f2()...
        }
    
        // 这里fc()不需要实现,直接继承自Adaptee,这是跟对象适配器最大的不同点
    }
    
    // 对象适配器:基于组合
    public interface ITarget {
        void f1();
    
        void f2();
    
        void fc();
    }
    
    public class Adaptee {
        public void fa() {
            // ...
        }
    
        public void fb() {
            // ...
        }
    
        public void fc() {
            // ...
        }
    }
    
    public class Adaptor implements ITarget {
        private Adaptee adaptee;
    
        public Adaptor(Adaptee adaptee) {
            this.adaptee = adaptee;
        }
    
        public void f1() {
            //委托给Adaptee
            adaptee.fa();
        }
    
        public void f2() {
            // 重新实现f2()...
        }
    
        public void fc() {
            adaptee.fc();
        }
    }
    

    代码地址

    i-learning

    写在最后

    如果你觉得我写的文章帮到了你,欢迎点赞、评论、分享、赞赏哦,你们的鼓励是我不断创作的动力~

    相关文章

      网友评论

        本文标题:设计模式系列篇(八)——适配器模式

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