您的位置:首页 > 其它

Patterns in SOME –Decorator

2007-03-01 15:28 344 查看
Code in C#:
[align=left] [/align]
[align=left]namespace Decorator_DesignPattern[/align]
[align=left]{[/align]
[align=left] using System;[/align]
[align=left] [/align]
[align=left] abstract class Component[/align]
[align=left] {[/align]
[align=left] public abstract void Draw(); [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] class ConcreteComponent : Component[/align]
[align=left] {[/align]
[align=left] private string strName;[/align]
[align=left] public ConcreteComponent(string s)[/align]
[align=left] {[/align]
[align=left] strName = s; [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] public override void Draw()[/align]
[align=left] {[/align]
[align=left] Console.WriteLine("ConcreteComponent - {0}", strName); [/align]
[align=left] } [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] abstract class Decorator : Component[/align]
[align=left] {[/align]
[align=left] protected Component ActualComponent;[/align]
[align=left] [/align]
[align=left] public void SetComponent(Component c)[/align]
[align=left] {[/align]
[align=left] ActualComponent = c;[/align]
[align=left] }[/align]
[align=left] public override void Draw()[/align]
[align=left] {[/align]
[align=left] if (ActualComponent != null)[/align]
[align=left] ActualComponent.Draw(); [/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] class ConcreteDecorator : Decorator [/align]
[align=left] {[/align]
[align=left] private string strDecoratorName;[/align]
[align=left] public ConcreteDecorator (string str)[/align]
[align=left] {[/align]
[align=left] // how decoration occurs is localized inside this decorator[/align]
[align=left] // For this demo, we simply print a decorator name[/align]
[align=left] strDecoratorName = str; [/align]
[align=left] }[/align]
[align=left] public override void Draw()[/align]
[align=left] {[/align]
[align=left] CustomDecoration();[/align]
[align=left] base.Draw();[/align]
[align=left] }[/align]
[align=left] void CustomDecoration()[/align]
[align=left] {[/align]
[align=left] Console.WriteLine("In ConcreteDecorator: decoration goes here");[/align]
[align=left] Console.WriteLine("{0}", strDecoratorName);[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] /// Summary description for Client.[/align]
[align=left] ///</summary>[/align]
[align=left] public class Client[/align]
[align=left] {[/align]
[align=left] Component Setup() [/align]
[align=left] {[/align]
[align=left] ConcreteComponent c = new ConcreteComponent("This is the real component");[/align]
[align=left] [/align]
[align=left] ConcreteDecorator d = new ConcreteDecorator("This is a decorator for the component");[/align]
[align=left] [/align]
[align=left] d.SetComponent(c);[/align]
[align=left] [/align]
[align=left] return d;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] public static int Main(string[] args)[/align]
[align=left] {[/align]
[align=left] Client client = new Client();[/align]
[align=left] Component c = client.Setup(); [/align]
[align=left] [/align]
[align=left] // The code below will work equally well with the real component, [/align]
[align=left] // or a decorator for the component[/align]
[align=left] [/align]
[align=left] c.Draw();[/align]
[align=left] [/align]
[align=left] return 0;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left]Code in SOME:[/align]

AComponent
a_Draw()

CConcreteComponent :AComponent
(string _strName)
o_Draw()

ADecorator : AComponent, ->AComponent[m_actualComponent]
SetComponent(AComponent)
o_Draw()

CConcreteDecorator : ADecorator
(string _strDecoratorName)
o_Draw()
CustomDecoration()

CClient
AComponent Setup()
main

CClient.main
{
CClient client.();
AComponent c = client.Setup()
{
CConcreteComponent c.("This is the real component");
CConcreteDecorator d.("This is a decorator for the component");
d.SetComponent( m_actualComponent = c ); //quick assignment for set method
d; //return d;
};
c.Draw<CConcreteDecorator>()
{
CustomDecoration();
Draw<ADecorator>() //invoke base method
{
m_actualComponent.Draw<CConcreteComponent>()
{
<% Console.WriteLine("ConcreteComponent - {0}", _strName); %>
};
};
};
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: