【C#】桥接模式

桥接模式:它是一种非常重要的软件设计模式,它的作用是:将抽象部分与实现部分分离,使它们可以互相独立的变化。

开放—封闭原则:简单的说就是,使软件可以扩展,但是不可以修改,就是说软件可以添加功能但是不改变源代码。

合成/聚合复用原则:尽量使用合成/聚合,尽量不要使用类继承。


今天借桥接模式的例子来理解一下桥接模式,以及开放-封闭原则、合成/聚合原则,那么下面大家先看一下下面这个例子

    //手机软件抽象类
    abstract class HandsetSoft
    {
        public abstract void Run();
    }
    
    //手机软件具体类
    class HandsetGame : HandsetSoft   //手机游戏软件
    {
        public override void Run()
        {
            Console.WriteLine("运行手机游戏") ;
        }
    }
    class HandsetAddressList : HandsetSoft    //手机通讯录软件
    {
        public override void Run()
        {
            Console.WriteLine("运行手机通讯录");
        }
    }
    //手机品牌抽象类
     abstract class HandsetBrand
    {
        protected HandsetSoft soft;

        public void SetHandsetSoft(HandsetSoft soft)
        {
            this.soft = soft;
        }
        public abstract void Run();
    }
    //手机品牌具体类
       class HandsetBrandN : HandsetBrand //品牌N
    {
        public override void Run()
        {
             soft.Run();
        }
    }
    class HandsetBrandM : HandsetBrand    //品牌M
    {
        public override void Run()
        {
            soft.Run();
        }
    }
    //客户段调用代码
    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();

        Console.Read();

    }

First 桥接模式

    在上述例子中,手机可以用品牌来分类,也可以用功能来分类,所以它的实现方式多种多样,也就是说各自可以独立的变化,这就是桥接模式的核心。

Second  开发-封闭原则

    上面说过,开闭原则就是允许扩展不允许修改,再看上面这个例子,我们可以随意的添加游戏功能类,比如添加一个视频播放功能:

class HandsetVideoPlayer :HandsetSoft
{
    public override void Run()
    {
        Console.WriteLine("运行视频播放")
    }
}
只要添加这段代码就可以,完全不需要对源代码做任何修改,即符合了开放-封闭原则。

Third  合成/聚合复用原则

    在上述例子中,手机品牌包含有手机软件,但软件不是品牌的一部分,所以属于聚合关系,所以在手机软件类中实现手机软件类的通信,这就是合成/聚合复用原则的小应用。
    因为继承属于强耦合,在某些时候有可能会形成庞大的代码量。比如上述例子中,如果手机软件继承手机品牌的话,那每添加一个手机品牌就需要重新写一次手机软件的功能,而这就会影响代码的灵活性,也会增加不必要的代码量;而 合成/聚合复用好处是有助于保持每个对象的封装,并被集中在单个任务上,这样类和类继承层次会保持在较小规模,不太可能形成庞然大物。
    当然了,也不是说什么时候都要用这个原则,比如让具体功能继承手机软件类就非常好,如果换成合成/聚合原则,可能会一团糟,我们要慢慢学习在最合适的时候使用最合适的设计模式。

好了,本次博客到此结束,欢迎大家提出宝贵的意见和建议。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值