装饰模式(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..."); } }}