/*
这里不要自己安装自己.否则无限循环递归就出不去了.
*/
//这里注意.不要自己递归调用自己.
/// <summary>
/// 自己设计一下这个模式的操作.
/// </summary>
public class ComponentSpace //模拟装饰者模式
{
public abstract class Component
{
public abstract void OperationMethod();
}
public class OnCreateComponent : Component
{
public override void OperationMethod()
{
Console.WriteLine("组件C");
}
}
public abstract class DecoratorComponent : Component
{
protected Component _component;
public override void OperationMethod()
{
if (_component != null)
{
_component.OperationMethod();
}
}
public void setCompnent(Component component)
{
_component = component;
}
}
//创建两个装饰器
public class DecoratorA : DecoratorComponent
{
public override void OperationMethod()
{
base.OperationMethod();
Addstring();
}
public void Addstring()
{
Console.WriteLine("我是组件安装A");
}
}
public class DecoratorB : DecoratorComponent
{
public override void OperationMethod()
{
base.OperationMethod();
Addstring2();
}
public void Addstring2()
{
Console.WriteLine("组件安装B");
for (int i = 0; i < 10; i++)
{
Console.Write($"{i} ");
}
Console.WriteLine();
}
}
public static void TestData()
{
ConsoleFormate.consoleFormate(() =>
{
OnCreateComponent c = new OnCreateComponent();
DecoratorA a = new DecoratorA();
DecoratorB b = new DecoratorB();
a.setCompnent(c);
//a.OperationMethod();
b.setCompnent(a);
b.OperationMethod();
}, @"装饰者");
}
}