/** * 主類抽象類 */ public abstract class Abstraction { /** * 橋接組合對象 */ protected Implementor implementor; public Abstraction(Implementor implementor) { this.implementor = implementor; } /** * 操做類 */ public abstract void operation(); } /** * 抽象接口 */ public interface Implementor { void operationImpl(); } /** * 實現類 */ public class RefinedAbstraction extends Abstraction { public RefinedAbstraction (Implementor implementor) { super(implementor); } @Override public void operation() { System.out.println("操做"); implementor.operationImpl(); } } /** * 接口抽象實現1 */ public class ConcreteImplementorA implements Implementor { @Override public void operationImpl() { System.out.println("橋接A"); } } /** * 接口抽象實現2 */ public class ConcreteImplementorB implements Implementor { @Override public void operationImpl() { System.out.println("橋接B"); } }
/** * 測試與應用 */ public class Test { public static void main(String[] args) { Abstraction abstraction1 = new RefinedAbstraction(new ConcreteImplementorA()); Abstraction abstraction2 = new RefinedAbstraction(new ConcreteImplementorB()); abstraction1.operation(); abstraction2.operation(); } }
操做 橋接A 操做 橋接B
角色介紹html
銀行有農業銀行和工商銀行等等,而帳戶有活期帳戶和死期帳戶,兩個維度很適合使用橋接模式,下面爲具體實現:
/** * 銀行抽象類 */ public abstract class Bank { protected Account account; public Bank(Account account) { this.account = account; } /** * 不限制方法名,但由於委派因此起的同樣 * 不要本身都實現了,要儘可能把行爲委託給組合的類 * @return */ 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 interface Account { /** * 打開帳號 * @return */ Account openAccount(); /** * 查看帳號類型 */ void showAccountType(); } /** * 按期帳戶實現類 */ public class DepositAccount implements Account { @Override public DepositAccount openAccount() { System.out.println("打開按期帳號"); return new DepositAccount(); } @Override public void showAccountType() { System.out.println("這是按期帳號"); } } /** * 活期帳戶實現類 */ public class SavingAccount implements Account { @Override public SavingAccount openAccount() { System.out.println("打開活期帳號"); return new SavingAccount(); } @Override public void showAccountType() { System.out.println("這是活期帳號"); } }
/** * 測試與應用 */ public class Test { public static void main(String[] args) { Bank icbcBank = new ICBCBank(new DepositAccount()); Account icbcAccount = icbcBank.openAccount(); icbcAccount.showAccountType(); Bank abcBank = new ABCBank(new SavingAccount()); Account abcAccount = abcBank.openAccount(); abcAccount.showAccountType(); } }
打開中國工商銀行帳號 打開按期帳號 這是按期帳號 打開中國農業銀行帳號 打開活期帳號 這是活期帳號
橋接模式和組合模式java
橋接模式和適配器模式git
慕課網設計模式精講
: https://coding.imooc.com/class/270.html 設計模式讀書筆記-----橋接模式
: http://www.javashuo.com/article/p-njknvetl-bm.html