浅谈设计模式之桥接模式

桥接模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。要理解抽象与它的实现分离,这并不是说让抽象类与它的派生类分离,这并没有什么意义。实现指的是每个类继承体系都各自用来实现自己的对象,对于多个维度的变化各不影响。

比如,我们日常中都会使用各种品牌的手机,而每个品牌的预装软件都不尽相同。假如我们要设计各种各样的包括软硬件的手机的话,那就不可避免同时拥有各种品牌和软件,这时候无论以软件或者品牌作为父类都不合适,最恰当的方式是品牌中包含手机软件。这个就涉及到了组合/聚合的使用。

根据组合/聚合复用原则,程序中药尽量使用组合/聚合,尽量不要使用类的继承,以免系统组织的设计过于复杂。优先使用对象的组合/聚合有助于保持每个类的封装被集中在单个任务上。

聚合表示一种弱的拥有关系,体现的是A对象可以包含B对象,但是B对象不是A对象的一部分;组合则表示一种强的拥有关系,体现的是严*的部分与整体的关系,并且部分和整体的生命周期一样。

UML图如下:
这里写图片描述

//相当于品牌父类
class Abstratction
{
    protected Implementor implementor;
    public void SetImplementor(Implementor implementor)
    {
        this.implementor = implementor;
    }
    public virtual void Operation()
    {
        implementor.Operation();
    }
}

//相当于具体品牌
class RefinedAbstraction : Abstraction
{
    public override void Operation()
    {
        implementor.Operation();
    }
}

//相当于软件父类
abstract class Implementor
{
    public abstract void Operation(); 
}

//相当于具体运行的软件A
class ConcreteImplementorA : Implementor
{
    public override void Operation()
    {
        Print("ConcreteImplementorA");
    }
}

//相当于具体运行的软件B
class ConcreteImplementorB : Implementor
{
    public override void Operation()
    {
        Print("ConcreteImplementorB");
    }
}

static void Main(string[] args)
{
    Abstraction ab = new RefinedAbstraction();
    ab.SetImplementor(new ConcreteImplementorA());
    ab.Operation();

    ab.SetImplementor(new ConcreteImplementorB());
    ab.Operation();

    console.Read();
}

桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。另外我们还需要掌控好这多个维度变化的分类,所以理解起来稍微复杂一点。

桥接模式的好处在于现在假如增加新的软件,那么也就是增加一个新的软件类并加以调用即可,而不会影响其他的类。其实这也恰好是开放-封闭原则的应用,封闭修改,开放拓展。

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值