zoukankan      html  css  js  c++  java
  • 设计模式-桥接模式

    桥接模式
    桥接(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();
        }
    }

     

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

  • 相关阅读:
    07. pt-fifo-split
    05. pt-diskstats
    06. pt-duplicate-key-checker
    坑爹的tp-link管理密码设置
    windows核心编程 第5章job lab示例程序 解决小技巧
    FormatMessage将错误代码转换成对应的字符串
    调试 内存查看StringCchCopy的运行前后
    对硬盘扇区的操作,练手代码
    关不掉的窗口
    读取unicode日志文件并清除记录的垃圾文件
  • 原文地址:https://www.cnblogs.com/woodpecker-z/p/14657391.html
Copyright © 2011-2022 走看看