桥接模式

    xiaoxiao2025-06-04  28

    介绍

    抽象部分与具体实现部分分离,通过组合的方式建立联系,而不是继承

    适用场景

    抽象和实现之间需要更强的灵活性一个类存在两个独立变化的维度,且两个维度都需要独立扩展不希望使用继承

    桥接和组合

    桥接关注在平行级别类的组合 组合关注在部分和整体之间的组合

    桥接和适配器

    适配器是改变接口 桥接模式目的是分离抽象和实现

    代码

    public interface Account { Account openAccount(); void showAccountType(); } public class SavingAccount implements Account { @Override public Account openAccount() { System.out.println("打开活期账号"); return new SavingAccount(); } @Override public void showAccountType() { System.out.println("这是一个活期账号"); } } public class FixAccount implements Account { @Override public Account openAccount() { System.out.println("打开定期账号"); return new FixAccount(); } @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 { protected 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 abc = new ABCBank(new FixAccount()); Account account = abc.openAccount(); account.showAccountType(); abc = new ABCBank(new SavingAccount()); account = abc.openAccount(); account.showAccountType(); Bank icbc = new ICBCBank(new FixAccount()); account = abc.openAccount(); account.showAccountType(); icbc = new ICBCBank(new SavingAccount()); account = abc.openAccount(); account.showAccountType(); } }

    案例分析

    银行:农业银行和工商银行 账户:活期账户和定期账户

    账户和银行分为两个平行类,账户作为实现,银行作为抽象,银行通过组合的方式持有账户,将操作委托为账户。 账户和银行可以分别独立扩展,如果使用继承实现,每个银行下有两个账户方法,会产生类爆炸情况发生。 创建农业银行类后,如果要调用Account对象的方法,直接委托(完全或部分委托)给持有的Account对象即可。

    最新回复(0)