zoukankan      html  css  js  c++  java
  • java23种设计模式-结构型模式-桥接模式

    一、定义

    桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

    这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。

    二、优点及缺点

    优点:

    1、桥梁模式分离了抽象部分和实现部分,从而极大地提供了系统的灵活性。让抽象部分和实现部分独立出来,分别定义接口,这有助于对系统进行分层,从而产生更好的结构化的系统。
    2、桥梁模式使得抽象部分和实现部分可以分别独立地扩展,而不会相互影响,从而大大提高了系统的可扩展性。

    缺点:

    1、桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

    三、代码实现:

    接口类:

    package com.example.demo.sjms.qiaojiemoshi;
    
    /**
     *  @Author: caesar
     *  @Date:2020年10月20日 17:10:39
     *  @Description: 接口类
     */
    public interface ClassInterface {
        public void println();
    }

    两个接口类:

    package com.example.demo.sjms.qiaojiemoshi;
    
    /**
     *  @Author: caesar
     *  @Date:2020年10月20日 17:10:02
     *  @Description: classA
     */
    public class ClassA implements ClassInterface{
        @Override
        public void println() {
            System.out.println("这是ClassA的方法!!!");
        }
    }
    package com.example.demo.sjms.qiaojiemoshi;
    
    /**
     *  @Author: caesar
     *  @Date:2020年10月20日 18:10:11
     *  @Description: classB
     */
    public class ClassB implements ClassInterface{
        @Override
        public void println() {
            System.out.println("这是classB!!!");
        }
    }

    桥接抽象类:

    package com.example.demo.sjms.qiaojiemoshi;
    
    /**
     *  @Author: caesar
     *  @Date:2020年10月20日 17:10:09
     *  @Description: 桥梁模式抽象类
     */
    public abstract class BridgeAbstract {
        private ClassInterface classInterface;
        public BridgeAbstract(ClassInterface classInterface){
            this.classInterface = classInterface;
        }
        public abstract void addPrintln();
    
    }

    桥接实现类:

    package com.example.demo.sjms.qiaojiemoshi;
    
    /**
     *  @Author: caesar
     *  @Date:2020年10月20日 17:10:42
     *  @Description: 桥梁类
     */
    public class Bridge extends BridgeAbstract{
        public Bridge(ClassInterface classInterface){
            super(classInterface);
        }
        @Override
        public void addPrintln() {
            super.classInterface.println();
            System.out.println("这是桥梁类的实现方法!!!");
        }
    }

    测试:

    package com.example.demo.sjms.qiaojiemoshi;
    
    /**
     *  @Author: caesar
     *  @Date:2020年10月20日 18:10:06
     *  @Description: 测试类
     */
    public class Test {
        public static void main(String[] args) {
            ClassInterface classA = new ClassA();
            ClassInterface classB = new ClassB();
            BridgeAbstract bridgeA = new Bridge(classA);
            BridgeAbstract bridgeB = new Bridge(classA);
            bridgeA.addPrintln();
            bridgeB.addPrintln();
        }
    }

    四、源码级别

    五、总结

    使用场景: 

    1、如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。

    2、对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。

    3、一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。

  • 相关阅读:
    windows命令行下杀死进程的方法
    nodejs与javascript 笔记
    SQL Server 从一组数字中随机获取一个数
    SQL Server Default Trace查看是谁对数据库进行了DDL操作
    Default Trace 查找日志文件快速增长的原因
    使用Default Trace查看谁还原了你的数据库?
    SQL Server 默认跟踪(Default Trace)介绍使用
    (转载) SQL Server AG集群启动不起来的临时自救大招
    (转载) 搭建非域AlwaysOn win2016+SQL2016
    (转载) 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)
  • 原文地址:https://www.cnblogs.com/mcjhcnblogs/p/13848037.html
Copyright © 2011-2022 走看看