C# 设计模式———桥接模式

桥接模式简介

将抽象和实现解耦,使得两者可以独立的变化。在这里插入图片描述

在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。实现系统可能有多个角度分类,每一种角度都可能变化。把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。

C# 桥接模式Demo

静态继承UML:
在这里插入图片描述
组合桥接模式:
在这里插入图片描述

using System;
using System.Collections.Generic;

namespace BridgePattern
{
    class Program
    {
        static void Main(string[] args)
        {
            PhoneBrand huaweiPhone = new Huawei();
            huaweiPhone.SetSoft(new WeiXin());
            huaweiPhone.Run();
            huaweiPhone.SetSoft(new Game());
            huaweiPhone.Run();

            PhoneBrand xiaoMiPhone = new XiaoMi();
            xiaoMiPhone.SetSoft(new Game());
            xiaoMiPhone.Run();
        }
    }

    /// <summary>
    /// 品牌
    /// </summary>
    public abstract class PhoneBrand
    {
        protected Software software = null;

        public void SetSoft(Software software)
        {
            this.software = software;
        }

        public abstract void Run();
    }

    /// <summary>
    /// 软件                        品牌与软件解耦
    /// </summary>
    public abstract class Software
    {
        public abstract void Run();
    }

    public class Huawei : PhoneBrand
    {
        public override void Run()
        {
            Console.WriteLine("using Huawei Phone");
            this.software.Run();
        }
    }

    public class XiaoMi : PhoneBrand
    {
        public override void Run()
        {
            Console.WriteLine("using XiaoMi Phone");
            this.software.Run();
        }
    }

    public class WeiXin : Software
    {
        public override void Run()
        {
            Console.WriteLine("Running WeiXin software");
        }
    }

    public class Game : Software
    {
        public override void Run()
        {
            Console.WriteLine("Running Game software");
        }
    }
}

测试结果:
在这里插入图片描述

由上例可知:静态继承的方式,若新添品牌或新添软件,类的数量 = 品牌数*软件数,会导致继承类的膨胀;而组合桥接, 类的数量 = 品牌数+软件数。

总结: 对于两个独立变化的维度,首先考虑使用桥接模式!

参考资料

  1. https://www.runoob.com/design-pattern/bridge-pattern.html
  2. https://www.bilibili.com/video/av78515440?t=1985&p=18
  3. 更多:

23种设计模式C#

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值