• 设计模式之桥接模式


    设计模式之桥接模式


    前言

    1,桥接模式(Bridge)是指将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变

    2,是一种结构型设计模式

    3,Brideg模式基于类的最小设计原则,通过使用封装,聚合及继承等行为让不同的类承担不同的职责,它的主要特点是把抽象与行为实现分离开来,从而可以保存各部分的独立性以及应对他们的功能扩展


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、核心概念

    1,桥接模式替代多层继承方案,可以减少子类的个数

    2,正确识别出系统中两个独立变化的维度(抽象,和实现)

    二、使用步骤

    接口

    public interface Brand {
    
        void open();
    
        void close();
    
        void call();
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    实现类1

    public class Vivo implements Brand{
        @Override
        public void open() {
            System.out.println("Vivo 手机开机");
        }
    
        @Override
        public void close() {
            System.out.println("Vivo 手机关机");
        }
    
        @Override
        public void call() {
            System.out.println("Vivo 手机打电话");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    实现类2

    public class XiaoMi implements Brand{
        @Override
        public void open() {
            System.out.println("小米手机开机");
        }
    
        @Override
        public void close() {
            System.out.println("小米手机关机");
        }
    
        @Override
        public void call() {
            System.out.println("小米手机打电话");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    抽象类(桥)

    public abstract class Phone {
    
        private Brand brand;
    
        public Phone(Brand brand) {
            this.brand = brand;
        }
    
        protected void open(){
            brand.open();
        }
    
        protected void close(){
            brand.close();
        }
    
        protected void call(){
            brand.call();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    不同的类型直接继承这个抽象类,去调用接口的实现类

    public class FoldedPhone extends Phone{
        public FoldedPhone(Brand brand) {
            super(brand);
        }
    
        @Override
        protected void open() {
            super.open();
            System.out.println("折叠样式手机");
        }
    
        @Override
        protected void close() {
            super.close();
            System.out.println("折叠样式手机");
        }
    
        @Override
        protected void call() {
            super.call();
            System.out.println("折叠样式手机");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    public class UpRightPhone extends Phone{
        public UpRightPhone(Brand brand) {
            super(brand);
        }
    
        @Override
        protected void open() {
            super.open();
            System.out.println("直立样式手机");
        }
    
        @Override
        protected void close() {
            super.close();
            System.out.println("直立样式手机");
        }
    
        @Override
        protected void call() {
            super.call();
            System.out.println("直立样式手机");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    调用

    public class Client {
    
        public static void main(String[] args) {
            HashMap<String,Object> map = new HashMap<>();
            map.put("",1);
            FoldedPhone p1 = new FoldedPhone(new XiaoMi());
            p1.open();
            p1.call();
            p1.close();
            System.out.println("------");
            FoldedPhone p2 = new FoldedPhone(new Vivo());
            p2.open();
            p2.call();
            p2.close();
            System.out.println("======");
            UpRightPhone p3 = new UpRightPhone(new XiaoMi());
            p3.open();
            p3.call();
            p3.close();
            System.out.println("------");
            UpRightPhone p4 = new UpRightPhone(new Vivo());
            p4.open();
            p4.call();
            p4.close();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    输出

    在这里插入图片描述


    桥接模式的注意事项和细节

    1)实现了抽象和实现部分的分离,从而行极大的提供了系统的灵活性,让抽象部分和实现部分独立开来,这有助于系统进行 分层设计,从而产生更好的结构化系统。

    2)对于系统的高层部分,只需要知道抽象部分和实现部分的接口就可以了,其它的部分由具体业务来完成。

    3)桥接模式替代多层继承方案,可以减少子类的个数,降低系统的管理和维护成本。

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

    5)桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围有一定的局限性,即需要有这样的应用场景。

    学习来源:B站韩顺平

  • 相关阅读:
    java 相似度计算
    猿创征文|我这样看国产数据库TBase
    智能音箱,扫地机器人,传感器,窗帘电机等产品有何优点?(下)
    【C语言陷阱】00_scanf函数输入含空格时的陷阱
    47个Docker常见故障的原因和解决方式
    PADS自己画的封装,导入PCB没有元件标签?
    Diffusion Models可控视频生成Control-A-Video:论文和源码解读
    【Vue基础二】--- 计算属性,watch,style,class,条件列表渲染
    SRE方法论之拥抱风险
    踏进字节的那一瞬间,我泪目了,这437天的外包经历值了....
  • 原文地址:https://blog.csdn.net/Susan003/article/details/126801611