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

重温设计模式 --- 桥接模式

作者头像
Niuery Diary
发布2023-10-22 16:38:54
1620
发布2023-10-22 16:38:54
举报

引言

桥接模式是一种结构型设计模式,它可以将一个大类或一组相关的类拆分成抽象和实现两个独立的层次结构,从而可以在两个层次结构中分别变化。桥接模式的核心思想是“尽可能将抽象部分和实现部分分离,使它们可以独立地变化”。这样可以使得系统更加灵活,易于扩展和维护。

在桥接模式中,有两个重要的角色:抽象部分和实现部分。抽象部分定义了一组抽象接口,它们与实现部分相互作用;实现部分则提供了这些接口的具体实现。

实现

  1. 定义抽象部分的接口或抽象类
代码语言:javascript
复制
public  interface  IShape
{
    void Draw();
}

2 .定义实现部分的接口或抽象类

代码语言:javascript
复制
public  interface  IColor
{
    void Fill();
}
  1. 实现实现部分的具体类
代码语言:javascript
复制
public  class  Red : IColor
{
    public void Fill()
    {
        Console.WriteLine("Fill with red color.");
    }
}

public  class  Blue : IColor
{
    public void Fill()
    {
        Console.WriteLine("Fill with blue color.");
    }
}

  1. 实现抽象部分的具体类,并在其中包含实现部分的对象
代码语言:javascript
复制
public  abstract  class  Shape
{
    protected IColor color;

    public Shape(IColor color)
    {
        this.color = color;
    }

    public abstract void Draw();
}

public  class  Circle : Shape
{
    public Circle(IColor color) : base(color)
    {
    }

    public override void Draw()
    {
        Console.Write("Draw a circle. ");
        color.Fill();
    }
}

public  class  Rectangle : Shape
{
    public Rectangle(IColor color) : base(color)
    {
    }

    public override void Draw()
    {
        Console.Write("Draw a rectangle. ");
        color.Fill();
    }
}

  1. 客户端调用
代码语言:javascript
复制
IColor red = new Red();
IColor blue = new Blue();

Shape circle = new Circle(red);
circle.Draw();

Shape rectangle = new Rectangle(blue);
rectangle.Draw();
  1. 输出:
代码语言:javascript
复制
Draw a circle. Fill with red color.
Draw a rectangle. Fill with blue color.

在上面的代码中,我们定义了两个实现部分的具体类 RedBlue,它们实现了 IColor 接口。然后我们定义了两个抽象部分的具体类 CircleRectangle,并在它们的构造函数中传入一个 IColor 对象,实现了抽象部分和实现部分的解耦。最后,在客户端代码中使用抽象部分,通过传入不同的实现部分对象来实现不同的功能

结论

桥接模式的优点在于它可以让抽象部分和实现部分各自独立地变化,从而可以更加灵活地组合它们。此外,它还可以减少类之间的耦合度,提高代码的可维护性和可扩展性。

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

本文分享自 Niuery Diary 微信公众号,前往查看

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

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

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