前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式之桥接模式

设计模式之桥接模式

作者头像
宿春磊Charles
发布2022-03-29 10:06:08
1620
发布2022-03-29 10:06:08
举报
文章被收录于专栏:DotNet 致知

这节讲桥接模式(Bridge Pattern)。

在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。如何设计类似于 Photoshop 这样的软件,能画不同形状和不同颜色的图形呢?如果用继承方式,m 种形状和 n 种颜色的图形就有 m×n 种,不但对应的子类很多,而且扩展困难。

为了解决上述问题,就出现了桥接模式,桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。

他的优点是:抽象与实现分离,扩展能力强符合开闭原则,符合合成复用原则,实现细节对客户透明,但由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,无疑增加了系统的理解与设计难度。

下面通过包包有多种颜色为例演示一下桥接模式:

代码语言:javascript
复制
class Program
{
    static void Main (string[] args)
    {
        new LV(new Red()).BagColor();
        new LV(new Green()).BagColor();
    }
}
// 包包的颜色属性抽象(属性不止一种,此处为简化代码,只写一种属性的抽象)
interface IColor
{
    void showColor();
}
// 属性的实现
class Red:IColor
{
    public void showColor()
    {
        Console.WriteLine("我是红色的。");
    }
}
// 属性的实现
class Green:IColor
{
    public void showColor()
    {
        Console.WriteLine("我是绿色的。");
    }
}
// 包包的抽象
abstract class Bag
{
    public IColor color = null;
    /// <summary>
    /// 实现不同颜色的表现
    /// </summary>
    /// <param name="color">注入包包颜色实现</param>
    public Bag(IColor color)
    {
        this.color = color;
    }
    public abstract void BagColor();
}
/// 具体的包包实现
class LV:Bag
{
    public LV(IColor color) : base(color){}
    public override void BagColor()
    {
        color.showColor();
    }
}

运行结果如下:

女士皮包有很多种,可以按用途分、按皮质分、按品牌分、按颜色分、按大小分等,存在多个维度的变化,所以采用桥接模式来实现女士皮包的选购比较合适。

本节到此结束...

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet 致知 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

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