这篇文章的理论说的真好,虽然语言用的是java的
http://design-patterns.readthedocs.io/zh_CN/latest/structural_patterns/decorator.html
建立一个理解模型:多类型的坦克F50,F21等可以不断增加,坦克的外观也可以不断的改变红色、蓝色等,这种模式就是可以动态的生产不同类型的对象还不用生成特定的子类去生成对象。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 装饰器模式
{
class Program
{
static void Main(string[] args)
{
F50 f1 = new F50();
BuleColorTank blueTank = new BuleColorTank(f1);
blueTank.Run();
Console.WriteLine(blueTank.color);
RedColorTank redTank = new RedColorTank(f1);
redTank.Run();
Console.WriteLine(redTank.color);
F21 f2 = new F21();
BuleColorTank blueTank2 = new BuleColorTank(f2);
blueTank2.Run();
Console.WriteLine(blueTank2.color);
RedColorTank redTank2 = new RedColorTank(f2);
redTank2.Run();
Console.WriteLine(redTank2.color);
Console.ReadKey();
}
}
public interface Tank
{
void Run();
void Stop();
}
public class F50 : Tank
{
public void Run()
{
Console.WriteLine("F50开始奔跑");
}
public void Stop()
{
Console.WriteLine("F50开始停止");
}
}
public class BuleColorTank : Tank
{
protected Tank tank;
public BuleColorTank(Tank tankinput)
{
this.tank = tankinput;
}
public void Run()
{
tank.Run();
}
public void Stop()
{
tank.Stop();
}
public string color = "bule";
}
public class RedColorTank : Tank
{
protected Tank tank;
public RedColorTank(Tank tankinput)
{
this.tank = tankinput;
}
public void Run()
{
tank.Run();
}
public void Stop()
{
tank.Stop();
}
public string color = "red";
}
public class F21 : Tank
{
public void Run()
{
Console.WriteLine("F21开始奔跑");
}
public void Stop()
{
Console.WriteLine("F21开始停止");
}
}
}