桥接模式说的是本来面向接口编程,但是呢,我们定义接口的时候吧,要考虑单一职责,所以不能眉毛胡子一把抓。
另外呢,在有些场景下,如果一个类的变化维度比较多(比如绘图中有颜色和形状这两个维度),那么使用继承会导致类爆炸,所以呢,搭个桥,组装一下。
晕了吧,看看代码:
public interface Shape { void Draw(); } public interface Color { void ApplyColor(); } public class Circle : Shape { private Color color; public Circle(Color color) { this.color = color; } public void Draw() { Console.Write("Drawing a Circle with "); color.ApplyColor(); } } public class Rectangle : Shape { private Color color; public Rectangle(Color color) { this.color = color; } public void Draw() { Console.Write("Drawing a Rectangle with "); color.ApplyColor(); } } public class Red : Color { public void ApplyColor() { Console.WriteLine("Red Color"); } } public class Blue : Color { public void ApplyColor() { Console.WriteLine("Blue Color"); } } class Program { static void Main(string[] args) { Shape circle = new Circle(new Red()); circle.Draw(); Shape rectangle = new Rectangle(new Blue()); rectangle.Draw(); } }
通过使用桥接模式,我们可以在运行时决定图形和画笔的组合方式,而且它们可以独立地变化,不会相互影响。这样,桥接模式为我们提供了一种灵活的设计方式,使得系统的扩展更加容易。
八股文如下:
桥接模式(Bridge Pattern)是一种结构型设计模式,它旨在将抽象部分与实现部分分离,从而使它们可以独立地变化。桥接模式使用了组合关系来实现这种分离,它将抽象部分和实现部分通过一个桥接接口连接起来,使它们可以独立地变化,互不影响。
桥接模式适用于以下情况:
- 当一个类存在两个或多个独立变化的维度时,可以使用桥接模式将它们分离,使得每个维度可以独立变化。
- 当一个类需要在多个维度上进行扩展,而使用继承会导致类爆炸时,可以使用桥接模式来避免类爆炸的问题。
桥接模式的关键是将抽象部分和实现部分分离,并通过桥接接口来连接它们。这样,抽象部分可以通过委托调用实现部分的方法来完成相应的功能,从而实现了两者的解耦。