• 设计模式-桥接模式


    桥接模式
    桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
    这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。
    主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。
    JAVA应用:
    com.mysql.jdbc.Driver


    public interface Account {
        Account openAccount();
        void showAccountType();
    
    }
    public class DepositAccount implements Account {
        @Override
        public Account openAccount() {
            System.out.println("打开定期账号");
            return new DepositAccount();
        }
    
        @Override
        public void showAccountType() {
            System.out.println("这是一个定期账号");
        }
    }
    public class SavingAccount implements Account {
        @Override
        public Account openAccount() {
            System.out.println("打开活期账号");
            //...
            return new SavingAccount();
        }
    
        @Override
        public void showAccountType() {
            System.out.println("这是一个活期账号");
        }
    }
    public abstract class Bank {
        protected Account account;
        public Bank(Account account){
            this.account = account;
        }
        abstract Account openAccount();
    
    }
    public class ABCBank extends Bank {
        public ABCBank(Account account) {
            super(account);
        }
    
        @Override
        Account openAccount() {
            System.out.println("打开中国农业银行账号");
            account.openAccount();
            return account;
        }
    }
    public class ICBCBank extends Bank {
        public ICBCBank(Account account) {
            super(account);
        }
    
        @Override
        Account openAccount() {
            System.out.println("打开中国工商银行账号");
            account.openAccount();
            return account;
        }
    }
    public class Test {
        public static void main(String[] args) {
            Bank icbcBank = new ICBCBank(new DepositAccount());
            Account icbcAccount = icbcBank.openAccount();
            icbcAccount.showAccountType();
    
            Bank icbcBank2 = new ICBCBank(new SavingAccount());
            Account icbcAccount2 = icbcBank2.openAccount();
            icbcAccount2.showAccountType();
    
            Bank abcBank = new ABCBank(new SavingAccount());
            Account abcAccount = abcBank.openAccount();
            abcAccount.showAccountType();
        }
    }

     

     这里定义的是接口,通过具体的类的实现传入

  • 相关阅读:
    python通过openpyxl操作excel
    python实现将字符串中以大写字母开头的单词前面添加“_”下划线
    python unittest setUp 和 setUpClass 区别
    python selenium 定制启动Chrome的选项注意事项(十九)
    Python 回调函数
    python 面试题
    python 常用的模块
    MySQL通过分组计算百分比
    mybatis 动态sql 的笔记 以及标签
    resultMap自定义映射---8.3.1. 解决列名(表中的字段名称)和实体类中的属性名不一致
  • 原文地址:https://www.cnblogs.com/woodpecker-z/p/14657391.html
Copyright © 2020-2023  润新知