之前就了解到继承复用有一定的缺点:比如如果基类发生了改变,那么派生类的的实现就不得不发生改变;而且从超类继承而来的实现是静态的,不可能在运行时发生改变,因此它的灵活性差并最终会限制复用性。
现在学习了合成/聚合复用原则就解决了继承复用的缺点。
下面是合成/聚合复用原则的思维导图:
桥接模式的结构图
桥接模式的结构图的基本代码
//Implementor类
abstract class Implementor
{
public abstract void Operation();
}
//concreteImplementorA和concreteImplementorB等派生类
class concreteImplementorA : Implementor
{
public override void Operation()
{
Console.WriteLine("具体实现A的方法执行。");
}
}
class concreteImplementorB : Implementor
{
public override void Operation()
{
Console.WriteLine("具体实现B的方法执行。");
}
}
//Abstaction类
class Abstraction
{
protected Implementor implementor;
public void SetImplementor(Implementor implementor)
{
this.implementor = implementor;
}
public virtual void Operation()
{
implementor.Operation();
}
}
//refinedabstraction类
class Refinedabstraction : Abstraction
{
public override void Operation()
{
implementor.Operation();
}
}
static void Main(string[] args)
{
//客户端实现
Abstraction ab = new Refinedabstraction();
ab.SetImplementor(new concreteImplementorA());
ab.Operation();
ab.SetImplementor(new concreteImplementorB());
ab.Operation();
Console.Read();
}
桥接模式的是说将抽象部分与实现部分分离,其实可以理解实现系统有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。
只要深入的理解设计原则,很多设计模式其实就是原则的应用。