美文网首页
设计模式(十二)-- 桥接模式

设计模式(十二)-- 桥接模式

作者: 信仰年輕 | 来源:发表于2018-12-03 13:54 被阅读0次

源代码
GitHub源代码

1.本文目标

本文目标是为了让大家认识并理解桥接模式

2.基本套路

定义:将抽象部分与它的具体实现部分分离,使它们都可以独立地变换
类型:结构型
选择关键点:是否可以将对象拆分成多个不相关的维度
设计原则:遵循单一职责、迪米特、开闭原则,体现功能复用
使用概率:20%
难度系数:中高

3.适用场景

1.抽象和具体之间增加更多的灵活性
2.一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立进行扩展
3.不希望使用继承,或因为多层继承导致系统类的个数剧增

4.使用步骤

用具体的栗子可以更好的理解,继续往下看

5.举个栗子

我们用具体的代码去更好的理解这个设计模式

5.1栗子说明

  • 背景:中国有很多银行,有农业银行和工商银行,有自己的账号,然后分为定期和活期,我们想一下,一块是银行,一块是账号
  • 目的:以后银行会越来越多,希望用桥接模式去进行设计,便于扩展

5.2使用步骤

实现代码如下:
步骤1.创建银行账号接口类

public interface Account {
    //打开账号
    Account openAccount();

    //查看账号的类型(是活期还是定期)
    void showAccountType();
}

步骤2. 创建定期账号和活期账号,实现于Account接口

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

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

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

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

步骤3.创建银行抽象类,桥在这个类中

public abstract class Bank {
    //通过组合的方式建立两个类的连线,桥在这里
    protected Account account;
    public Bank(Account account) {
        this.account = account;
    }
    abstract Account openAccount();
}

步骤4.创建中国工商银行和中国农业银行,继承于Bank

//工商银行
public class ICBCBank extends Bank {
    public ICBCBank(Account account) {
        super(account);
    }

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

//农业银行
public class ABCBank extends Bank {
    public ABCBank(Account account) {
        super(account);
    }

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

步骤5. 测试

 public static void main(String[] args) {
        //工商银行,然后账号类型是 定期
        Bank icbcBank = new ICBCBank(new DepositAccount());
        Account icbcAccount = icbcBank.openAccount();
        icbcAccount.showAccountType();

        //工商银行,然后账号类型是 活期
        Bank icbcBank2 = new ICBCBank(new SavingAccount());
        Account icbcAccount2 = icbcBank2.openAccount();
        icbcAccount2.showAccountType();

        //农业银行,然后账号类型是 活期
        Bank abcBank = new ABCBank(new SavingAccount());
        Account abcAccount = abcBank.openAccount();
        abcAccount.showAccountType();
 }

6.优点

  • 分离抽象部分和具体实现部分
  • 提高了系统的可扩展性
  • 符合开闭原则
  • 符合合成复用原则

7.缺点

  • 增加了系统的理解和设计难度
  • 需要正确的识别出系统中两个独立变化的维度

8.总结

本文只是对桥接模式进行一个分享,接下来会从创建型模式,结构型模式,行为型模式,这三大类展开一个系列分享,大家可以持续进行关注,信仰年輕的设计模式,蟹蟹啦。

相关文章

  • 设计模式(十二)-- 桥接模式

    源代码GitHub源代码 1.本文目标 本文目标是为了让大家认识并理解桥接模式 2.基本套路 定义:将抽象部分与它...

  • 设计模式(十二)-桥接模式

    桥接模式 将抽象部分与其它的实现部分分离,这样抽象化与实现化解耦,使它们可以独立的变化.应用场景是实现系统可能有多...

  • 设计模式-桥接模式

    设计模式-桥接模式 定义 桥接模式(Bridge Pattern)也称为桥梁模式、接口(Interface)模式或...

  • 桥接模式

    设计模式:桥接模式(Bridge)

  • 设计模式——桥接模式

    设计模式——桥接模式 最近公司组件分享设计模式,然而分配给我的是桥接模式。就在这里记录我对桥接模式的理解吧。 定义...

  • 设计模式之桥接模式

    设计模式之桥接模式 1. 模式定义 桥接模式又称柄体模式或接口模式,它是一种结构性模式。桥接模式将抽象部分与实现部...

  • 桥接模式

    介绍 桥接模式(Bridge Pattern) 也称为桥梁模式,是结构型设计模式之一。桥接模式的作用就是连接 "两...

  • Java设计模式——桥接模式

    Java设计模式之桥接模式 回顾 上一期分享了适配器模式,主要为了实现解耦 桥接模式 简介 桥接模式是对象的结构模...

  • 设计模式-桥接模式

    桥接模式介绍 桥接模式(Bridge Pattern)也称为桥梁模式,是结构型设计模式之一。顾名思义其与现实中的桥...

  • Android设计模式——桥接模式(七大结构型)

    1.桥接模式介绍 桥接模式(Bridge Pattern)也称为桥梁模式,是七大结构型设计模式之一。 2....

网友评论

      本文标题:设计模式(十二)-- 桥接模式

      本文链接:https://www.haomeiwen.com/subject/omaecqtx.html