装饰模式(Decorator Pattern):
动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。
模式角色与结构:
示例代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace CSharp.DesignPattern.DecoratorPattern {class Program{static void Main(string[] args){Component component;Component componentDecorator;component = new Window();componentDecorator = new ScrollBarDecorator(component);componentDecorator.display();component = new TextBox();componentDecorator = new BlackBorderDecorator(component);componentDecorator.display();Console.ReadLine();}}// 抽象构件abstract class Component{public abstract void display();}// 具体构件class Window : Component{public override void display(){Console.WriteLine("Window...");}}class TextBox : Component{public override void display(){Console.WriteLine("TextBox...");}}// 抽象装饰类class ComponentDecorator : Component{private Component component; // 维持对抽象构件类型对象的引用public ComponentDecorator(Component component) // 注入抽象构件类型的对象 {this.component = component;}public override void display(){component.display();}}// 具体装饰类class ScrollBarDecorator : ComponentDecorator{public ScrollBarDecorator(Component component) : base(component){ }public override void display(){this.SetScrollBar();base.display();}public void SetScrollBar(){Console.WriteLine("Add Scroll Bar...");}}class BlackBorderDecorator : ComponentDecorator{public BlackBorderDecorator(Component component): base(component){ }public override void display(){this.SetBlackBorder();base.display();}public void SetBlackBorder(){Console.WriteLine("Add Black Border...");}} }