• 重学设计模式之-桥接模式


    桥接设计模式

    1.定义

    ​ 将抽象部分与它的具体实现部分分离 使它们都可以独立地变化 解耦

    1.1 特点

    ​ 通过组合的方式建议两个类之间联系,而不是继承

    1.2 类型 : 结构型

    2.适用场景

    ​ 1、抽象和具体实现之间增加更多的灵活性

    ​ 2、一个类存在两个或多个独立变化的维度 且这两个或多个维度都需要独立进行扩展

    3、不希望使用继承 或因为多层继承导致系统类的个数增加

    3.缺点

    1.增加了系统的理解与设计难度

    2.需要正确地设别出系统中两个独立变化的维度

    4.优点

    ​ 1.分离抽象部分及具体实现部分 解耦

    ​ 2.提高了系统的可扩展性

    ​ 3.符合合成复用原则

    ​ 4.符合开闭原则

    5.桥接-相关的设计模式

    桥接模式和组合模式

    桥接模式和适配器模式

    6.uml 设计图
    在这里插入图片描述

    8.代码如下

    package com.zw.design.pattern.creational.structural.bridge;
    
    /***
     * 银行账号
     */
    public interface Account {
        Account openAccount();
        void showAccountType();
    }
    
    package com.zw.design.pattern.creational.structural.bridge;
    
    /***
     * 定期账号
     */
    public class DepositAccount implements Account
    {
        @Override
        public Account openAccount() {
            System.out.println("打开定期账号");
            return new DepositAccount();
        }
    
        @Override
        public void showAccountType() {
            System.out.println("这是一个定期账号");
        }
    }
    
    package com.zw.design.pattern.creational.structural.bridge;
    
    public class SavingAccount implements Account{
        @Override
        public Account openAccount() {
            System.out.println("打开活期账号");
            return new SavingAccount();
        }
    
        @Override
        public void showAccountType() {
            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
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    package com.zw.design.pattern.creational.structural.bridge;
    
    public abstract class Bank {
        protected  Account account;
    
        public Bank(Account account){
            this.account=account;
        }
        abstract  Account openAccount();
    
    }
    
    package com.zw.design.pattern.creational.structural.bridge;
    
    /****
     * 建设银行
     */
    public class CCBBank extends Bank {
    
    
        public CCBBank(Account account) {
            super(account);
        }
    
        @Override
        Account openAccount() {
            System.out.println("打开建设银行的账户");
            return account.openAccount();
        }
    }
    
    package com.zw.design.pattern.creational.structural.bridge;
    
    /****
     * 招商银行
     */
    public class CMBBank extends Bank {
    
    
        public CMBBank(Account account) {
            super(account);
        }
    
        @Override
        Account openAccount() {
            System.out.println("打开招商银行账号");
            return account.openAccount();
        }
    }
    
    
    • 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
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    3.测试类

    package com.zw.design.pattern.creational.structural.bridge;
    
    public class Test {
    
        public static void main(String[] args) {
            Bank cmb=new CMBBank(new DepositAccount());
            cmb.openAccount().showAccountType();
            Bank cmb2=new CMBBank(new SavingAccount());
            cmb2.openAccount().showAccountType();
    
            Bank ccb=new CCBBank(new SavingAccount());
            ccb.openAccount().showAccountType();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    测试结果如下
    在这里插入图片描述
    桥接模式jdk当中应用解析
    在jdk 当中Driver 当中是用的代码如图
    在这里插入图片描述
    代码如下

  • 相关阅读:
    springboot+mybatis+thymeleaf实现简单的留言板
    小龙虾优化算法COA求解不闭合SD-MTSP,可以修改旅行商个数及起点(提供MATLAB代码)
    “查找”学习提纲(二)——树型查找和散列查找
    Kleopatra与MinGW64中gpg冲突
    web前端面试高频考点——Vue组件间的通信及高级特性(多种组件间的通信、自定义v-model、nextTick、插槽)
    RHCSA认证考试---8.配置 autofs
    Spring Cloud Ribbon:负载均衡的服务调用
    延时队列我在项目里是怎么实现的?
    修改 Zynq 7000 系列 CPU 主频到 800HMz(7045 和 7100)
    大数据 为什么用
  • 原文地址:https://blog.csdn.net/qq_32048567/article/details/126110857