装饰器模式 动态组合装饰
DesignPartten_Decoration_Dynamic_Composition
先定义个一个形状的接口,可以转换为字符串
interface IShape { string AsString(); }
添加各种形状
class Circel:IShape { float ridus; public Circel(float ridus) { this.ridus = ridus; } public string AsString() { return $"Circle Ridus:{ridus}"; } public void Resize(float size) { ridus *= size; } } class Square :IShape { float Side; public Square(float side) { Side = side; } public string AsString() { return $"Square Side: {Side}" ; } }
开始装饰:
class ColorShape : IShape { IShape shape; string color; public ColorShape(IShape shape, string color) { this.shape = shape; this.color = color; } public string AsString() { return $"{shape.AsString()} Color :{color}"; } } class Transparent:IShape { IShape shape; float percentage; public Transparent(IShape shape, float _percentage) { this.shape = shape; this.percentage = _percentage; } public string AsString() { return $"{shape.AsString()} Transparent:{percentage*100.0}%"; } } class Program { static void Main(string[] args) { Square sq = new Square(1.23f); Console.WriteLine(sq.AsString()); ColorShape colorShape = new ColorShape(sq, "Black"); Console.WriteLine(colorShape.AsString()); Transparent transparent = new Transparent(colorShape, 0.5f); Console.WriteLine(transparent.AsString()); } }
运行时调用