前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【设计模式-桥接模式】

【设计模式-桥接模式】

作者头像
Liusy
发布2020-09-01 16:24:43
7610
发布2020-09-01 16:24:43
举报
文章被收录于专栏:Liusy01Liusy01

【导读】现实中有很多是可以组合使用的,例如A有两种产品,B有三种产品,那么A和B可以有六种组合,类似于笛卡尔积。这就是桥接模式。

一、定义

将抽象部分与它的具体实现部分分离,使他们都可以独立变化。通过组合的方式建立两个类之间的联系,而不是继承。

比如组装电脑需要内存卡和主板,内存卡有三星、闪迪,主板有技嘉和华硕,那么此电脑组合有下列几种方式:

三星

闪迪

技嘉

三星 X 技嘉

闪迪 X 技嘉

华硕

三星 X 华硕

闪迪 X 华硕

二、示例 以银行卡为例,银行有中国银行、中国工商银行,存储方式有活期存储和定期存储两种方式。

抽象账号对象:

public interface Account {
    public Account openAccount();
    public void getAccountType();
}

活期存储账号:

public class CurrentAccount implements Account {
    @Override
    public Account openAccount() {
        System.out.println("打开一个活期账号");
        return new CurrentAccount();
    }
    @Override
    public void getAccountType() {
        System.out.println("这是一个活期账号");
    }
}

定期存储账号:

public class FixAccount implements Account {
    @Override
    public Account openAccount() {
        System.out.println("打开一个定期账号");
        return new FixAccount();
    }
    @Override
    public void getAccountType() {
        System.out.println("这是一个定期账号");
    }
}

抽象银行对象:

public abstract class Bank {
    1、包含一个账号属性
    protected Account account;
    public Bank(Account account) {
        this.account = account;
    }
    Account openAccount(){
        return account;
    };
}

工商银行对象:

public class ICBCBank extends Bank {
    public ICBCBank(Account account) {
        super(account);
    }
    @Override
    Account openAccount() {
        System.out.println("打开中国工商银行的账号");
        account.openAccount();
        return account;
    }
}

中国银行对象:

public class BOCBank extends Bank {
    public BOCBank(Account account) {
        super(account);
    }
    @Override
    Account openAccount() {
        System.out.println("打开中国银行的账号");
        account.openAccount();
        return account;
    }
}

测试类:只需要确定是什么银行以及什么账号

Bank bank = new BOCBank(new FixAccount());
Account account = bank.openAccount();
account.getAccountType();

运行结果:

看一下它们的类图:

两种不同的对象是以组合的形式存在,这样有利于扩展。

三、源码实例

(1)JDBC的DriverManager和DriverInfo

可以加在多种驱动

类加载的时候会将驱动进行加载至registeredDrivers列表中

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Liusy01 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档