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類圖。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章