Bridge (桥接)
关键词:连接两端的变化
问题:
主体类有变化产生不同的派生,但是主体类成员也有变化,在组合关系上可能会形成排列组合。
所以将两个变化分别独立,再用关联建立主体与成员的关系,这个关联即是桥。
意图:
将抽象部分(主体的成员)与它的实现部分分离,
使它们都可以独立地变化。
优点:
- 抽象和实现的分离。
- 优秀的扩展能力。
- 实现细节对客户透明。
缺点:
桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
适用场景
- 当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时。
- 当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。
- 当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时。
实现类图
抽象类:
public abstract class 输出位置类
{
public abstract void Draw();
}
public abstract class 图形
{
public 输出位置类 implemetor;
//画图方法
virtual public void Write()
{
implemetor.Draw();
}
}
具体实现类
using System;
public class 黑板 : 输出位置类
{
public override void Draw()
{
Console.WriteLine("黑板:");
}
}
using System;
public class 纸上 : 输出位置类
{
public override void Draw()
{
Console.WriteLine("纸上:");
}
}
using System;
public class 圆形 : 图形
{
public override void Write()
{
implemetor.Draw();
Console.WriteLine("圆形");
}
}
using System;
public class 矩形 : 图形
{
public override void Write()
{
implemetor.Draw();
Console.WriteLine("矩形");
}
}
测试
using System;
class Program
{
static void Main(string[] args)
{
//纸上画圆
图形 obj = new 圆形();
obj.implemetor = new 纸上();
obj.Write();
//黑板画矩形
图形 obj1 = new 矩形();
obj1.implemetor = new 黑板();
obj1.Write();
Console.Read();
}
}
输出示例
设计模式------首页