桥接设计模式
1.定义
将抽象部分与它的具体实现部分分离 使它们都可以独立地变化 解耦
1.1 特点
通过组合的方式建议两个类之间联系,而不是继承
1.2 类型 : 结构型
2.适用场景
1、抽象和具体实现之间增加更多的灵活性
2、一个类存在两个或多个独立变化的维度 且这两个或多个维度都需要独立进行扩展
3、不希望使用继承 或因为多层继承导致系统类的个数增加
3.缺点
1.增加了系统的理解与设计难度
2.需要正确地设别出系统中两个独立变化的维度
4.优点
1.分离抽象部分及具体实现部分 解耦
2.提高了系统的可扩展性
3.符合合成复用原则
4.符合开闭原则
5.桥接-相关的设计模式
桥接模式和组合模式
桥接模式和适配器模式
6.uml 设计图

8.代码如下
package com.zw.design.pattern.creational.structural.bridge;
/***
* 银行账号
*/
public interface Account {
Account openAccount();
void showAccountType();
}
package com.zw.design.pattern.creational.structural.bridge;
/***
* 定期账号
*/
public class DepositAccount implements Account
{
@Override
public Account openAccount() {
System.out.println("打开定期账号");
return new DepositAccount();
}
@Override
public void showAccountType() {
System.out.println("这是一个定期账号");
}
}
package com.zw.design.pattern.creational.structural.bridge;
public class SavingAccount implements Account{
@Override
public Account openAccount() {
System.out.println("打开活期账号");
return new SavingAccount();
}
@Override
public void showAccountType() {
System.out.println("这是一个活期账号");
}
}
package com.zw.design.pattern.creational.structural.bridge;
public abstract class Bank {
protected Account account;
public Bank(Account account){
this.account=account;
}
abstract Account openAccount();
}
package com.zw.design.pattern.creational.structural.bridge;
/****
* 建设银行
*/
public class CCBBank extends Bank {
public CCBBank(Account account) {
super(account);
}
@Override
Account openAccount() {
System.out.println("打开建设银行的账户");
return account.openAccount();
}
}
package com.zw.design.pattern.creational.structural.bridge;
/****
* 招商银行
*/
public class CMBBank extends Bank {
public CMBBank(Account account) {
super(account);
}
@Override
Account openAccount() {
System.out.println("打开招商银行账号");
return account.openAccount();
}
}
3.测试类
package com.zw.design.pattern.creational.structural.bridge;
public class Test {
public static void main(String[] args) {
Bank cmb=new CMBBank(new DepositAccount());
cmb.openAccount().showAccountType();
Bank cmb2=new CMBBank(new SavingAccount());
cmb2.openAccount().showAccountType();
Bank ccb=new CCBBank(new SavingAccount());
ccb.openAccount().showAccountType();
}
}
测试结果如下

桥接模式jdk当中应用解析
在jdk 当中Driver 当中是用的代码如图

代码如下