桥接模式

一、定义

将抽象部分与它的具体实现部分分离,使它们都可以独立地变化

通过组合的方式建立两个类之间联系,而不是继承

类型:结构型

 

二、适用场景

1、抽象和具体实现之间增加更多的灵活性

2、一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立进行扩展

3、不希望适用继承,或因为多层继承导致系统的类的个数剧增

 

三、优点

1、分离抽象部分及具体实现部分

2、提高了系统的可扩展性

3、符合开闭原则

4、符合合成复用原则

 

四、缺点

1、增加了系统的理解和设计难度

2、需要正确地识别系统中两个独立变化的维度

 

五、与桥接相关的设计模式

1、桥接模式和组合模式

    组合模式强调部分和整体间的组合

    桥接模式强调平行级别上不同类的组合

2、桥接模式和适配器模式

    两个模式都是让某个东西配合工作

   适配器模式的目的是改变已有的接口,让它们之间可以相互的配合。适配器模式可以把功能相似接口不同的类适配起来。

    桥接模式是分离抽象和具体的实现,目的是分离。

 

六。Coding

场景: 银行(中国农业银行,中国工商银行),账号(活期账号,定期账号)。交叉后就有四种组合。随着银行的增多,账号类型的增多。那么久适用用桥接模式。

1、 创建账号

public interface Account {

    Account openAccount();

    void showAccountType();

}

 

2、创建定期账号

/**
 * 定期账号
 */
public class DepositeAccount  implements  Account{
    @Override
    public Account openAccount() {
        System.out.println("打开定期账号");
        return new DepositeAccount();
    }

    @Override
    public void showAccountType() {
        System.out.println("这是一个定期账号");
    }
}

  

3、创建活期账号

public class SavingAccount  implements  Account{
    @Override
    public Account openAccount() {
        System.out.println("打开活期账号");
        return new SavingAccount();
    }

    @Override
    public void showAccountType() {
        System.out.println("这是一个活期账号");
    }
}

  

4、创建银行

public abstract class Bank {
    protected Account account;
    public Bank(Account account){
        this.account = account;
    }

    abstract Account openAccount();
}

 

5、农业银行

/**
 * 农业银行
 */
public class ABCBank extends Bank {

    public ABCBank(Account account) {
        super(account);
    }

    @Override
    Account openAccount() {
        System.out.println("打开中国农业银行账号");
        account.openAccount();
        return account;
    }
}

  

  

6、工商银行

/**
 * 工商银行
 */
public class ICBCBank extends Bank {

    public ICBCBank(Account account) {
        super(account);
    }

    @Override
    Account openAccount() {
        System.out.println("打开中国工商银行账号");
        account.openAccount();
        return account;
    }
}

  

  

 

7、UML图

《桥接模式》

 

 右边Bank是抽象部分。

左边openAccount和showAccountType是实现。

Bank和Account是组合关系。

 

8、测试类

public class Test {
    public static void main(String[] args) {
        Bank icbcBank = new ICBCBank(new DepositeAccount());
        Account icbcAccount = icbcBank.openAccount();
        icbcAccount.showAccountType();

        Bank abcBank = new ICBCBank(new SavingAccount());
        Account saveAccount = abcBank.openAccount();
        saveAccount.showAccountType();
    }
}

  

三、在源码中的使用

1、JDBC的Driver接口

《桥接模式》

DriverManager和DriverInfo

《桥接模式》

 

    原文作者:设计模式
    原文地址: http://www.cnblogs.com/linlf03/p/10416574.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞