zoukankan      html  css  js  c++  java
  • 桥接模式

    介绍

    桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
    这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。

    使用场景:

    1. 如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。
    2. 对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。
    3. 一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。

    UML结构

    桥接模式的角色和职责:
    1.Client 调用端
    这是Bridge模式的调用者。
    2.抽象类(Abstraction)
    抽象类接口(接口这货抽象类)维护队行为实现(implementation)的引用。它的角色就是桥接类。
    3.Refined Abstraction
    这是Abstraction的子类。
    4.Implementor
    行为实现类接口(Abstraction接口定义了基于Implementor接口的更高层次的操作)
    5.ConcreteImplementor
    Implementor的子类

    实现

    定义Implementor接口,其中定义了其实现类必须要实现的接口方法operation():

    public interface Implementor {
        public void operate();
    }
    
    

    定义Implementor接口的两个实现类:

    public class ImplementorA implements Implementor {
        @Override
        public void operate() {
            System.out.println("执行实现A...");
        }
    }
    
    public class ImplementorB implements Implementor {
        @Override
        public void operate() {
            System.out.println("执行实现B...");
        }
    }
    

    定义桥接类Abstraction,其中有对Implementor接口的引用:

    public abstract class Abstraction {
        private Implementor implementor;
    
        public Abstraction(Implementor implementor){
            this.implementor = implementor;
        }
    
        public void operate(){
            implementor.operate();
        }
    }
    
    

    定义Abstraction类的子类RefinedAbstraction:

    public class RefinedAbstraction extends Abstraction {
    
        @Override
        public void operate() {
            super.operate();
        }
    }
    

    测试client:

    public class Client {
        public static void main(String[] args) {
            Abstraction abstraction = new RefinedAbstraction(new ImplementorB());
            abstraction.operate();
        }
    }
    
    

    运行结果:

  • 相关阅读:
    python模块安装路径
    yum软件搜索
    项目里用到的python知识点
    python调用C函数
    opencv VideoCapture使用示例
    Django模型层之多表操作
    博客园 装饰
    mysql条件查询-排除null ---oracle、mysql 区分总结
    Android——Fragment详解
    Android——监听事件总结
  • 原文地址:https://www.cnblogs.com/hanlk/p/13210865.html
Copyright © 2011-2022 走看看