• 10、Java模式桥接模式


    桥接模式

    将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。

    桥接(Bridge)模式的优点是:

    • 抽象与实现分离,扩展能力强
    • 符合开闭原则
    • 符合合成复用原则
    • 其实现细节对客户透明

    缺点是:由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,能正确地识别出系统中两个独立变化的维度,这增加了系统的理解与设计难度。

    模式的结构

    可以将抽象化部分与实现化部分分开,取消二者的继承关系,改用组合关系。

    桥接(Bridge)模式包含以下主要角色。

    1. 抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用。
    2. 扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。
    3. 实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色调用。
    4. 具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现。

    其结构图如图所示。

    模式的实现

    桥接模式的代码如下:

    // 实现化角色
    public interface Implementor {
        void OperationImpl();
    }
    
    // 具体实例化角色
    public class ConcreteImplementorA implements Implementor{
        @Override
        public void OperationImpl() {
            System.out.println("具体实现化(Concrete Implementor)角色被访问");
        }
    }
    
    // 抽象化角色
    public abstract class Abstraction {
        protected Implementor implementor;
        protected Abstraction(Implementor implementor) {
            this.implementor = implementor;
        }
        public abstract void operation();
    }
    
    // 扩展抽象化角色
    public class RefinedAbstraction extends Abstraction{
        protected RefinedAbstraction(Implementor implementor) {
            super(implementor);
        }
    
        @Override
        public void operation() {
            System.out.println("扩展抽象化(Refined Abstraction)角色被访问");
            implementor.OperationImpl();
        }
    }
    
    // 测试类
    public class Main {
        public static void main(String[] args) {
            Implementor implementor = new ConcreteImplementorA();
            Abstraction abstraction = new RefinedAbstraction(implementor);
            abstraction.operation();
        }
    }
    

    程序的运行结果如下:

    扩展抽象化(Refined Abstraction)角色被访问
    具体实现化(Concrete Implementor)角色被访问

    模式拓展

    在软件开发中,有时桥接(Bridge)模式可与适配器模式联合使用。当桥接(Bridge)模式的实现化角色的接口与现有类的接口不一致时,可以在二者中间定义一个适配器将二者连接起来,其具体结构图如图

  • 相关阅读:
    static,const,extern,以及全局常量
    ios开发之级联菜单(两个tableView实现)
    ios开发零散知识点总结
    ios开发static关键字的理解
    ios开发清除SDWebImage图片缓存
    python
    Scapy 伪造网络数据包
    LeetCode-73. Set Matrix Zeroes
    排序算法系列:Shell 排序算法
    Android中级第十一讲之MotionEvent的分发、拦截机制分析
  • 原文地址:https://www.cnblogs.com/pengjingya/p/14942880.html
Copyright © 2020-2023  润新知