-
-
abstract class Implementor
{
public abstract void Operation();
}
-
-
ConcreteImplementorA和ConcreteImplementorA类
-
class ConcreteImplementorA:Implementor
{
public override void Operation()
{
Console.WriteLine(具体实现A的方法执行);
}
}
class ConcreteImplementorB:Implementor
{
public override void Operation()
{
Console.WriteLine(具体实现B的方法执行);
}
}
-
-
class Abstraction
{
protected Implementor implementor;
public void SetImplementor(Implementor implementor)
{
this.implementor=implementor;
}
public virtual void Operation()
{
implementor.Operation();
}
}
class RefinedAbstraction:Abstraction
{
public override void Operation()
{
implementor.Operation();
}
}
-
- 客户端实现:
-
static void Main(string[] args)
{
Abstraction ab=new RefinedAbstraction();
ab.SetImplementor(new ConcreteImplementorA());
ab.Operation();
}
-
-
注意:实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让他们独立变化,减少它们之间的耦合。
-
实现了抽象类,还要实现其中的方法。因他们用的是聚合关系。Abstraction要实现Implemntor中的所有方法。
-
合成/聚合复用原则:尽量使用合成/聚合,尽量不要使用继承。