前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#设计模式——(结构型-桥接设计模式)

C#设计模式——(结构型-桥接设计模式)

原创
作者头像
用户10053120
发布2022-10-11 17:12:21
3630
发布2022-10-11 17:12:21
举报
文章被收录于专栏:C# 设计原则C# 设计原则

一、应用背景

不同颜色的汽油车、电动车。

二、定义

合成复用原则是将已有对象纳入到新对象中,作为新对象的对象成员来实现,新对象可以调用已有对象的功能,从而达到复用。

桥接设计模式是将抽象部分与它的实现部分分离,使他们都可以独立的变化。(抽象部分Car和实现部分IClor之间独立变化),从而避免继承产生大量子类的问题。

优点:

  1. 相对于继承而言,极大的减少子类的个数,降低管理和维护成本;
  2. 提高了系统的可扩展性,在两个变化维度中任意变化一个维度,都不需要修改原有系统,负荷开闭原则,就像一座桥把两个变化的维度连接起来。

缺点

  1. 会增加系统的理解和设计难度,由于组合/聚合关系建立在抽象层,要求开发者针对抽象进行设计和编程。
  2. 要求正确识别系统内的两个独立变化的维度关系,引起对开发者的编程思想有较高的要求。

三、代码

代码语言:javascript
复制
        //把汽车颜色变成实现,把汽车编程抽象
        public interface IClor
        {
            string ShowColor();
        }
        public class Red : IClor
        {
            public string ShowColor()
            {
                return "红色";
            }
        }
        public class White : IClor
        {
            public string ShowColor()
            {
                return "白色";
            }
        }
        public class Black : IClor
        {
            public string ShowColor()
            {
                return "黑色";
            }
        }
        public abstract class Car
        {
            public abstract void Move(IClor color);
        }
        public class QiyouCar : Car
        {
            public override void Move(IClor color)
            {
                Console.WriteLine(color.ShowColor()+"颜色的汽油车在奔驰");
            }
        }
        public class DaindongCar : Car
        {
            public override void Move(IClor color)
            {
                Console.WriteLine(color.ShowColor() + "颜色的电动车在奔驰");
            }
        }
代码语言:javascript
复制
            DaTing daTing = new DaTing();
            daTing.KaiZhengMing();
            Car car = new QiyouCar();
            car.Move(new Red());

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档