目录
一、桥接模式的定义与类型
- 一、桥接模式的定义与类型
- 二、桥接模式的适用场景
- 三、桥接模式的优点
- 四、桥接模式的缺点
- 五、桥接模式相关的设计模式
- 六、桥接模式示例
1、定义
- 将抽象部分与它具体实现部分分离,使他们都可以独立的变化
- 通过组合的方式简历两个类之间联系,而不是继承
2、类型
- 结构型
- 抽象和具体实现之间增加更多的灵活性
- 一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立进行扩展
- 不希望使用继承,或因为多继承导致系统类的个数剧增
- 分离抽象部分及其具体实现部分
- 提高了系统的可扩展性
- 符合开闭原则
- 符合合成复用原则
- 增加了系统的理解与设计难度
- 需要正确的识别出系统中两个独立变化的维度
- 桥接模式和组合模式
- 桥接模式和适配器模式
示例描述:以银行和账户为例。
1、创建一个账号接口
package com.rf.designPatterns.structural.bridge;
/***
* @Description: 创建一个账号接口
* @Author: xz
*/
public interface Account {
Account OpenAccount();//开通账号
void showAccountType();//显示账号类型。活期账号、定期账号
}
2、创建定期账号类
package com.rf.designPatterns.structural.bridge;
/**
* @description: 创建定期账号类
* @author: xz
*/
public class DepositAaccount implements Account{
@Override
public Account OpenAccount() {
System.out.println("开通定期账号");
return new DepositAaccount();
}
@Override
public void showAccountType() {
System.out.println("这个一个定期账号");
}
}
3、创建活期账号类
package com.rf.designPatterns.structural.bridge;
/**
* @description: 创建活期账号类
* @author: xz
*/
public class SavingAccount implements Account{
@Override
public Account OpenAccount() {
System.out.println("开通活期账号");
return new SavingAccount();
}
@Override
public void showAccountType() {
System.out.println("这个一个活期账号");
}
}
4、创建一个抽象的银行类
package com.rf.designPatterns.structural.bridge;
/**
* @description: 创建一个抽象的银行类
* @author: xz
*/
public abstract class Bank {
protected Account account;
//构造方法
public Bank(Account account){
this.account=account;
}
//与Account接口中开通账号方法同名的抽象方法
abstract Account OpenAccount();
}
5、创建中国建设银行类
package com.rf.designPatterns.structural.bridge;
/**
* @description: 创建中国建设银行类
* @author: xz
*/
public class ChinaJSBank extends Bank{
//创建构造器
public ChinaJSBank(Account account) {
super(account);
}
//重写开通账号方法
@Override
Account OpenAccount() {
System.out.println("开通建行账号");
return account;
}
}
6、创建中国农业银行类
package com.rf.designPatterns.structural.bridge;
/**
* @description: 创建中国农业银行类
* @author: xz
*/
public class ChinaNYBank extends Bank{
//创建构造器
public ChinaNYBank(Account account) {
super(account);
}
//重写开通账号方法
@Override
Account OpenAccount() {
System.out.println("开通中国农业银行账户");
return account;
}
}
7、桥接模式测试类
package com.rf.designPatterns.structural.bridge;
/**
* @description: 桥接模式测试类
* @author: xz
*/
public class Test {
public static void main(String[] args) {
ChinaJSBank chinaJHBank = new ChinaJSBank(new DepositAaccount());
Account account = chinaJHBank.OpenAccount();
account.showAccountType();
ChinaJSBank chinaJHBank1 = new ChinaJSBank(new SavingAccount());
Account account1 = chinaJHBank1.OpenAccount();
account1.showAccountType();
ChinaNYBank chinaNYBank = new ChinaNYBank(new DepositAaccount());
Account account2 = chinaNYBank.OpenAccount();
account2.showAccountType();
ChinaNYBank chinaNYBank1 = new ChinaNYBank(new SavingAccount());
Account account3= chinaNYBank1.OpenAccount();
account3.showAccountType();
}
}
8、输出结果如下:
9、类图如下: