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

本文深入解析桥接设计模式,通过手机品牌与软件的实例,阐述如何将抽象与实现分离,以达到两者独立变化的目的,降低系统复杂度。

1、定义

(Bridge)将抽象部分与它的实现部分分离,是他们都可以独立地变化。

2、使用场景

有一个N品牌的手机,这个手机上有一个小游戏,也有通讯录软件,然后又有一个M品牌的手机,同时也有小游戏,和通讯录软件。如果有更多的手机品牌,那么每个品牌的手机也会有对应的手机软件。

3、代码结构UML图

在这里插入图片描述
手机品牌:Abstraction 抽象;
手机软件:Implementor 实现;
手机品牌N、M:被提炼的抽象;
通讯录、游戏:具体的实现。

4、类的实现

(1)、HandsetSoft (手机软件抽象类)
public abstract class HandSetSoft {
    public abstract void run();
}
(2)、HandsetGame、HandsetAddressList (游戏、通讯录具体类)
public class HandsetGame extends HandSetSoft{
    @Override
    public void run() {
        System.out.println("运行手机游戏");
    }
}
public class HandsetAddressList extends HandSetSoft {
    @Override
    public void run() {
        System.out.println("运行手机通讯录");
    }
}

(3)、HandsetBrand (手机品牌类)
public abstract class HandsetBrand {
    protected HandSetSoft soft;
    //品牌需要关注软件,所以可在机器中按安装软件(设置手机软件),已备运行
    public void setHandsetSoft(HandSetSoft soft) {
        this.soft = soft;
    }
    //运行
    public abstract void run();

}
(4)、HandsetBrandN、HandsetBrandM (品牌N、品牌M)
public class HandsetBrandN extends  HandsetBrand {
    @Override
    public void run() {
        soft.run();
    }
}
public class HandsetBrandM extends  HandsetBrand {
    @Override
    public void run() {
        soft.run();
    }
}

5、客户端调用

public static void main(String[] args) {
        HandsetBrand ab;
        ab = new HandsetBrandN();
        ab.setHandsetSoft(new HandsetGame());
        ab.run();
        ab.setHandsetSoft(new HandsetAddressList());
        ab.run();

        ab=new HandsetBrandM();
        ab.setHandsetSoft(new HandsetGame());
        ab.run();
        ab.setHandsetSoft(new HandsetAddressList());
        ab.run();
    }
输出:

在这里插入图片描述

6、总结

实现系统可能有多个角度分类,如把手机看成抽象类、下面有品牌N、M,品牌下面有对应的通讯录软件、和游戏等。

每一种分类都有可能的变化,那么就把这种多角度分离出来让他们独立变化,减少他们之间的耦合。


参考:《大话设计模式》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值