• 设计模式之桥接模式


    定义(百度百科):
          将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。

    UML类图:

    具体的代码:

    public class Client {
        @Test
        public void testBridge() {
            Implementor impl = new ConcreteImplementor();
            Abstraction refinedAbstraction = new RefinedAbstraction();
            refinedAbstraction.setImpl(impl);
            refinedAbstraction.operation();
        }
    }
    
    public abstract class Abstraction {
        protected Implementor impl;
    
        public void setImpl(Implementor impl) {
            this.impl=impl;
        }
    
        public abstract void operation();
    }
    
    public class RefinedAbstraction extends Abstraction {
    
        @Override
        public void operation() {
            impl.operation();
        }
    }
    
    public interface Implementor {
        void operation();
    }
    
    public class ConcreteImplementor implements Implementor {
    
        @Override
        public void operation() {
            System.out.println("实际应用");
        }
    }

    模块说明:

    Abstraction:定义抽象类的接口。
                       维护一个指向Implementor类型对象的引用。
    RefinedAbstraction:
                      扩充由Abstraction定义的接口。
    Implementor:
                      定义实现类的接口,该接口不一定要与Abstraction的接口完全一致,事实上这两个
                      接口可以完全不同。一般来讲, Implementor接口仅提供基本操作,而Abstraction则
                      定义了基于这些基本操作的较高层次的操作。
    ConcreteImplementor:
                      实现Implementor接口并定义它的具体实现。

    具体例子:
           网络上有个例子我觉得很不错,分享到这里,画画可以选择蜡笔和毛笔,如果每种笔分为大中小三个型号,并且有12种颜色
    那达到同样的需求,蜡笔的话就是12颜色*3种型号,36支笔,毛笔需要12个染色盒和3支不同型号的毛笔,共15只笔,
    如果哪天需要新增一种型号的笔,超大号,那蜡笔需要新增12支,毛笔只需要新增1支。
    多维度变化,这样的例子桥接模式就很合适了。

    应用场景:
    引用《研磨设计模式》这本书的一张图如下

    优缺点:
    优点:
    分离抽象和实现部分(面向抽象编程)
    更有效减少类的个数,更好的扩展性(就像上面的例子,新增一种型号的笔就可以了)

    缺点:
    桥接模式,会增加系统设计的难度,并且对抽象要求很高。
    桥接模式要求正确识别出两个独立变化的维度,因此其使用范围具有一定的局限性,如何正确识别两个独立维度也是不易的

    总结:桥接的本质就是,区分维度分离抽象和实现

  • 相关阅读:
    [转]Spring的IOC原理[通俗解释一下]
    自我介绍
    什么是存储过程
    Linux 之 最常用的20条命令
    [转]sql语句中出现笛卡尔乘积 SQL查询入门篇
    mysql 多表连接
    正则表达式
    postman 测试API
    [转]mysql 视图
    数据库 修改统一显示时间
  • 原文地址:https://www.cnblogs.com/daily-note/p/7151320.html
Copyright © 2020-2023  润新知