Java设计模式之桥接模式

Java设计模式之桥接模式

考虑一下生活中的场景,银行存款有很多类型,最常见的是活期和定期,而银行有很多家。比如中国农业银行有活期和定期,中国工商银行也有活期定期。下面看看桥接模式怎么实现:

//新建接口,账户
public interface Account {
     Account openAccount();
     void showAccountType();
}

//定期账户类,实现接口
public class DepositeAccount implements Account {
    @Override
    public Account openAccount() {
        System.out.println("打开定期账号");
        return new DepositeAccount();
    }

    @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("这是活期账号");

    }
}

//抽象银行类,要把Account接口引入此类
public abstract class Bank {
    //account对象交给Bank的实现类
    protected Account account;

    public Bank(Account account) {
        this.account = account;
    }

    //声明一个抽象方法,与Account接口里面的openAccount方法对应,方法名可以不相同
    //此方法最终委托给Account接口实现类里面的方法
    abstract Account openAccount();

}

//银行实现类,中国农业银行
public class ABCBank extends Bank{
    public ABCBank(Account account) {
        super(account);
    }

    @Override
    Account openAccount() {
        System.out.println("打开中国农业银行账户");
        //委托出去,委托给接口实现类里面的方法
        account.openAccount();
        //直接返回父类里面获取到的account对象
        return account;
    }
}

//银行实现类,中国工商银行
public class ICBCBank extends Bank{
    public ICBCBank(Account account) {
        super(account);
    }

    @Override
    Account openAccount() {
        System.out.println("打开工商银行账户");
        //委托出去,委托给接口实现类里面的方法
        account.openAccount();
        return account;
    }
}

//调用
   public static void main(String[] a){
        Bank ban1=new ICBCBank(new DepositeAccount());
        Account account1=ban1.openAccount();
        account1.showAccountType();

        Bank bank2=new ABCBank(new SavingAccount());
        Account account2=bank2.openAccount();
        account2.showAccountType();

    }

//结果
打开工商银行账户
打开定期账号
这是定期账号
打开中国农业银行账户
打开活期账号
这是活期账号

桥接模式下,银行类型与账户类型可以任意组合,这里2*2有4种组合,如果再增加一种账户类型,就有2*3共6种组合,5个实现子类。

在不使用桥接模式时,假设有两家银行,三种账户,那么A银行下面创建三个账户对象,B银行下面创建三个账户对象。这可能出现的问题是,如果银行很多,账户类型也很多,将导致类爆炸。

看看桥接模式下的UML类图。

Java设计模式之桥接模式_第1张图片

 

 

你可能感兴趣的:(Java,Java设计模式)