• 【设计模式】Java设计模式 - 桥接模式


    【设计模式】Java设计模式 - 桥接模式

    😄 不断学习才是王道
    🔥 继续踏上学习之路,学之分享笔记
    👊 总有一天我也能像各位大佬一样
    🏆 一个有梦有戏的人 @怒放吧德德
    🌝分享学习心得,欢迎指正,大家一起学习成长!

    请添加图片描述

    简介

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

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

    桥接模式实例

    桥接模式:将实现和抽象放在两个不同的类层次中,使之各自可以独立改变。
    他的主要特点是把抽象与行为分离开来,保持了各自的独立性和扩展。

    举个汽车例子,汽车有多种品牌,也有多种类型,在扩展样式或者品牌的时候互不影响,我们就可以将抽象部分与实现部分分离,使它们都可以独立的变化,让它们独立变化,来减少它们之间耦合。

    UML图:
    在这里插入图片描述
    提供商标接口类,汽车品牌是他的实现类;汽车类是抽象类,汽车的类别通过继承抽象类来分离出来。

    代码示例

    代码如下:

    ①、品牌接口

    package com.lyd.demo;
    /**
     * @Author: lyd
     * @Description: 汽车品牌的接口
     * @Date: 2022-08-28
     */
    public interface Brand {
        void info();
        void open();
        void close();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    ②、汽车品牌

    继承汽车接口类

    package com.lyd.demo.car;
    
    import com.lyd.demo.Brand;
    
    /**
     * @Author: lyd
     * @Description: 奔驰汽车类
     * @Date: 2022-08-28
     */
    public class Benz implements Brand {
        private String type;
    
        public Benz(String type) {
            this.type = type;
        }
    
        public void info() {
            System.out.println("奔驰汽车->" + type);
        }
    
        public void open() {
            System.out.println("奔驰汽车");
        }
    
        public void close() {
            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
    • 24
    • 25
    • 26
    • 27
    • 28

    红旗汽车类相同,这里就不贴代码,详细代码之后会上传github中。

    ③、抽象汽车类

    通过聚合方式,使用构造法获取品牌对象进行实例化

    package com.lyd.demo;
    /**
     * @Author: lyd
     * @Description: 汽车抽象类
     * @Date: 2022-08-28
     */
    public abstract class Car {
        private Brand brand;
        public Car(Brand brand) {
            this.brand = brand;
        }
        public void info() {
            this.brand.info();
        }
        public void open() {
            this.brand.open();
        }
        public void close() {
            this.brand.close();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    ④、汽车类型子类

    继承父类,重写父类方法,这里也调用了父类方法,用打印的方式简单理解

    package com.lyd.demo.type;
    import com.lyd.demo.Brand;
    import com.lyd.demo.Car;
    /**
     * @Author: lyd
     * @Description: 新能源
     * @Date: 2022-08-28
     */
    public class NewEnergy extends Car {
        public NewEnergy(Brand brand) {
            super(brand);
        }
        public void info() {
            System.out.print("新能源类型汽车 -- ");
            super.info();
        }
        public void open() {
            System.out.print("新能源类型汽车启动 -- ");
            super.open();
        }
        public void close() {
            System.out.print("新能源类型汽车关闭 -- ");
            super.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

    ⑤、桥接模式测试

    通过new汽车类型方式获取汽车对象,其中可得到什么类型什么品牌的汽车

    package com.lyd.demo.bridge;
    import com.lyd.demo.Car;
    import com.lyd.demo.car.Benz;
    import com.lyd.demo.car.HongQi;
    import com.lyd.demo.type.NewEnergy;
    import com.lyd.demo.type.Suv;
    /**
     * @Author: lyd
     * @Description: 测试
     * @Date: 2022-08-28
     */
    public class BridgeTest {
        public static void main(String[] args) {
            Car banz = new Suv(new Benz("GLA"));
            banz.info();
            banz.open();
            banz.close();
            Car hq = new NewEnergy(new HongQi("H5"));
            hq.info();
            hq.open();
            hq.close();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    运行结果:
    在这里插入图片描述
    👍创作不易,如有错误请指正,感谢观看!记得一键三连哦!👍

    💓德德小建议:

    理解设计模式不是一件简单的事情,需要不断的学习和动手去练习,才能理解。只有掌握好设计模式,才能够真正的理解SpringAOP和Mybatis的底层原理。各位读者可以和我一样,动手敲一敲代码,甚至用不同的例子来做,通过debug一步一步调试,还有就是多看看别人的例子。能够有助于理解!谢谢各位观看指点!❤️ ❤️ ❤️

  • 相关阅读:
    开利网络携手南京同仁堂开启“链企来”大健康企业专场沙龙会
    【长难句分析精讲】并列结构练习题
    44、Flink之module模块介绍及使用示例和Flink SQL使用hive内置函数及自定义函数详细示例--网上有些说法好像是错误的
    SpringBoot整合分布式任务调度平台xxl-job
    趣学算法|斐波那契 矩阵算法
    论文解读(GIN)《How Powerful are Graph Neural Networks》
    Python学习十:网络编程
    机器学习基础:奇异值分解(SVD)
    ZZULIOJ:1158: 又是排序(指针专题)
    【论文笔记之 BLMS】Block Implementation of Adaptive Digital Filters
  • 原文地址:https://blog.csdn.net/qq_43843951/article/details/126570320