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

    桥梁模式也叫桥接模式,其定义如下:将抽象和实现解耦,使得两者可以独立变化。它的重点在“解耦”上面。

    它有一下四个角色:

    • Abstraction抽象角色:它的职责是定义该角色的行为,同时保存对一个实现化角色的引用,该角色一般是一个抽象类。
    • Implementor实现化角色:它是接口或抽象类,定义角色所必须的行为和属性。
    • RefinedAbstraction修正抽象化角色:它引用实现化角色对抽象化角色进行修正。
    • ConcreateImplementor具体实现化角色:他实现接口或抽象类角色定义的方法和属性。

    下面看一个通用代码:

    //实现化角色
    public interface implementor{
        //基本方法
        public void doSomething();
        public void doAnything();
    }
    
    //具体实现化角色
    public class ConcreateImplementor1 implements Implementor{
        public void doSomething(){
        }
        public void doAnything(){
        }
    }
    public class ConcreateImplementor2 implements Implementor{
        public void doSomething(){
        }
        public void doAnything(){
        }
    }
    //抽象化角色
    public abstract class Abstraction{
        //定义对实现化角色的引用
        private Implementor imp;
        //约束子类必须实现的构造函数
        public Abstraction(Implementor impl){
            this.imp = impl;
        }
        //自身的行为或属性
        public void request(){
            this.imp.doSomething();
        }
        //获得实现化角色
        public Implementor getImpl(){
            return imp;
        }
    }
    
    //具体抽象化角色
    public class RedifinedAbstraction extends Abstraction{
        public RedifinedAbstraction(Implementor impl){
            super(impl);
        }
        //修正父类的行为
        @Override
        public void request(){
            super.request();
            super.getImpl.doSomething();
        }
    }
    
    //场景类
    public class Client{
        public static void main(String[] args){
            //定义一个实现化角色
            Implementor imp = new ConcreateImplementor1();
            //定义一个抽象化角色
            Abstraction abs = new RedifinedAbstraction(imp);
            //执行行文
            abs.request();
        }
    }

    桥梁模式的优点:

    • 抽象和实现分离:这源于桥梁模式的特点,完全是为了解决继承的缺点而提出的,在这种模式下,实现可以不受抽象的约束,不再绑定到一个固定的抽象层次上。
    • 优秀的扩充能力。
    • 实现细节对客户透明:客户不用关心细节的实现,他已经由抽象层通过聚合完成了封装。

    使用场景:

    • 不希望或不适合使用继承的场景:比如继承层次过度,无法更细化设计颗粒的场景
    • 接口或抽象类不稳定的场景:明知道接口不稳定,可能会经常发生变化,还要使用继承或实现来实现业务需求,那是得不偿失的。
    • 重用性要求比较高的场景:设计的颗粒度越细,被重用的的可能性越大,而采用继承则受限于父类,难以实现细粒度设计。
  • 相关阅读:
    Python基础知识2-内置数据结构(上)
    vs code的快捷方式
    vs code配置
    vs code安装
    web浏览器兼容问题
    js正則表達式
    MVC MVP MVVM
    vue-cli(vue脚手架)
    web攻擊
    web前端面試題
  • 原文地址:https://www.cnblogs.com/loveBolin/p/9743498.html
Copyright © 2011-2022 走看看