public abstract class Shape { //形状内部包含了另一个维度:color protected IColor color; public void SetColor(IColor color) { this.color = color; } //设置形状 public abstract void Draw(); } /// <summary> /// 圆形 /// </summary> public class Circle : Shape { public override void Draw() { color.Paint("圆形"); } } /// <summary> /// 长方形 /// </summary> public class Rectangle : Shape { public override void Draw() { color.Paint("长方形"); } } /// <summary> /// 三角形 /// </summary> public class Triangle : Shape { public override void Draw() { color.Paint("三角形"); } }
颜色接口和三种实现类:
/// <summary> /// 颜色接口 /// </summary> public interface IColor { void Paint(string shape); } /// <summary> /// 蓝色 /// </summary> public class Blue : IColor { public void Paint(string shape) { Console.WriteLine($"蓝色的{shape}"); } } /// <summary> /// 黄色 /// </summary> public class Yellow : IColor { public void Paint(string shape) { Console.WriteLine($"黄色的{shape}"); } } /// <summary> /// 红色 /// </summary> public class Red : IColor { public void Paint(string shape) { Console.WriteLine($"红色的{shape}"); } }
客户端调用代码:
class Program { static void Main(string[] args) { Shape circle = new Circle(); IColor blue = new Blue(); circle.SetColor(blue);//设置颜色 circle.Draw();//画图 Shape triangle = new Triangle(); triangle.SetColor(blue); triangle.Draw(); Console.ReadKey(); } }
程序运行结果
上边例子的类图:
桥接模式的使用场景:
当系统实现有多个角度分类,每种分类都可能变化时使用。近几年提出的微服务概念采用了桥接模式的思想,通过各种服务的组合来实现一个大的系统。
桥接模式的优点:
1.实现抽象和具体的分离,降低了各个分类角度间的耦合;
2.扩展性好,解决了多角度分类使用继承可能出现的子类爆炸问题。
桥接模式的缺点:
桥接模式的引进需要通过聚合关联关系建立抽象层,增加了理解和设计系统的难度。
原文:https://www.cnblogs.com/wyy1234/p/10016051.html