桥接模式
Posted linbq1911
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了桥接模式相关的知识,希望对你有一定的参考价值。
1.定义:将抽象部分与它的具体实现部分分离,使它们都可以独立地变化;
通过组合的方式建立两个类之间联系,而不是继承。
2.类型:结构型
3.适用场景:抽象和具体实现之间增加更多的灵活性;
一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立进行扩展;
不希望使用继承,或因为多层继承导致系统类的个数剧增。
4.优点:分离抽象部分及其具体实现部分;提高了系统的可扩展性;
符合开闭原则;符合合成复用原则。
5.缺点:增加了系统的理解与设计难度;需要正确地识别出系统中两个独立变化的维度。
6.相关设计模式:组合模式、适配器模式。
7.实例目录package
8.实例UML类图
9.代码
1 package com.geely.design.pattern.structural.bridge; 2 3 public abstract class Bank { 4 protected Account account; 5 public Bank(Account account){ 6 this.account = account; 7 } 8 abstract Account openAccount(); 9 }
1 package com.geely.design.pattern.structural.bridge; 2 3 public class ABCBank extends Bank { 4 public ABCBank(Account account) { 5 super(account); 6 } 7 8 @Override 9 Account openAccount() { 10 System.out.println("打开中国农业银行账号"); 11 account.openAccount(); 12 return account; 13 } 14 }
1 package com.geely.design.pattern.structural.bridge; 2 3 public class ICBCBank extends Bank { 4 public ICBCBank(Account account) { 5 super(account); 6 } 7 8 @Override 9 Account openAccount() { 10 System.out.println("打开中国工商银行账号"); 11 account.openAccount(); 12 return account; 13 } 14 }
1 package com.geely.design.pattern.structural.bridge; 2 3 public interface Account { 4 Account openAccount(); 5 void showAccountType(); 6 }
1 package com.geely.design.pattern.structural.bridge; 2 3 public class DepositAccount implements Account { 4 @Override 5 public Account openAccount() { 6 System.out.println("打开定期账号"); 7 return new DepositAccount(); 8 } 9 10 @Override 11 public void showAccountType() { 12 System.out.println("这是一个定期账号"); 13 } 14 }
1 package com.geely.design.pattern.structural.bridge; 2 3 public class SavingAccount implements Account { 4 @Override 5 public Account openAccount() { 6 System.out.println("打开活期账号"); 7 return new SavingAccount(); 8 } 9 10 @Override 11 public void showAccountType() { 12 System.out.println("这是一个活期账号"); 13 } 14 }
1 package com.geely.design.pattern.structural.bridge; 2 3 public class Test { 4 public static void main(String[] args) { 5 Bank icbcBank = new ICBCBank(new DepositAccount()); 6 Account icbcAccount = icbcBank.openAccount(); 7 icbcAccount.showAccountType(); 8 9 Bank icbcBank2 = new ICBCBank(new SavingAccount()); 10 Account icbcAccount2 = icbcBank2.openAccount(); 11 icbcAccount2.showAccountType(); 12 13 Bank abcBank = new ABCBank(new SavingAccount()); 14 Account abcAccount = abcBank.openAccount(); 15 abcAccount.showAccountType(); 16 } 17 }
以上是关于桥接模式的主要内容,如果未能解决你的问题,请参考以下文章