桥接模式(结构型)

一:背景

这里拿大话设计模式一书中的例子来说,有两种实体,手机和手机软件;我们在每种手机品牌上都有各种的软件app来运行,如何表示呢?一般有两种维度划分,通过手机品牌分类,每种品牌下分软件类;另一中以手机软件app类型划分,类型下分手机品牌;可以发现,这两种拓展性都不好,耦合太高,所以,这里通过聚合的优于继承的原则,就有了桥接模式。

二:概述

1,定义
将抽象与它的实现部分分离,使它们都可以独立的变化。

2.类图结构
桥接模式

三:实例分析

就拿上面手机品牌和手机软件的例子来说
桥接模式
下面代码

手机软件:

public abstract class HandsetSoft {
    abstract void run();
}

举两个例子,手机游戏软件和通讯录软件:

public class HandsetGame extends HandsetSoft{

    @Override
    void run() {
        System.out.println("运行手机游戏");
    }
}
public class HandsetAddressList extends HandsetSoft{
    @Override
    void run() {
        System.out.println("运行手机通讯录");
    }
}

手机品牌:

public abstract class HandsetBrand {
    protected HandsetSoft handsetSoft;

    //设置手机软件
    public void setHandsetSoft(HandsetSoft handsetSoft){
        this.handsetSoft = handsetSoft;
    }
    //运行
    public abstract void run();
}

两个手机品牌的实现:

public class HandsetBrandM extends HandsetBrand {
    @Override
    public void run() {
        System.out.println("我是m哦");
        handsetSoft.run();
    }
}
public class HandsetBrandN extends HandsetBrand {
    @Override
    public void run() {
        System.out.println("我是n哦");
        handsetSoft.run();
    }
}

来看看客户端调用:

HandsetBrand ab;
        ab = new HandsetBrandN();

        ab.setHandsetSoft(new HandsetAddressList());
        ab.run();
        ab.setHandsetSoft(new HandsetGame());
        ab.run();

        ab = new HandsetBrandM();

        ab.setHandsetSoft(new HandsetAddressList());
        ab.run();
        ab.setHandsetSoft(new HandsetGame());
        ab.run();

至此,我们对桥接就有了一个基本的认识了。

参考书籍:《大话设计模式》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值