您的位置:首页 > 其它

Patterns in SOME –Prototype

2007-03-01 15:59 274 查看
[align=left]Code in C#:[/align]
[align=left] [/align]
[align=left]namespace Prototype_DesignPattern[/align]
[align=left]{[/align]
[align=left] using System;[/align]
[align=left] [/align]
[align=left] // Objects which are to work as prototypes must be based on classes which [/align]
[align=left] // are derived from the abstract prototype class[/align]
[align=left] abstract class AbstractPrototype [/align]
[align=left] {[/align]
[align=left] abstract public AbstractPrototype CloneYourself();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] // This is a sample object[/align]
[align=left] class MyPrototype : AbstractPrototype [/align]
[align=left] {[/align]
[align=left] override public AbstractPrototype CloneYourself()[/align]
[align=left] {[/align]
[align=left] return ((AbstractPrototype)MemberwiseClone());[/align]
[align=left] }[/align]
[align=left] // lots of other functions go here![/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] // This is the client piece of code which instantiate objects[/align]
[align=left] // based on a prototype. [/align]
[align=left] class Demo [/align]
[align=left] {[/align]
[align=left] private AbstractPrototype internalPrototype;[/align]
[align=left] [/align]
[align=left] public void SetPrototype(AbstractPrototype thePrototype)[/align]
[align=left] {[/align]
[align=left] internalPrototype = thePrototype; [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] public void SomeImportantOperation()[/align]
[align=left] {[/align]
[align=left] // During Some important operation, imagine we need[/align]
[align=left] // to instantiate an object - but we do not know which. We use[/align]
[align=left] // the predefined prototype object, and ask it to clone itself. [/align]
[align=left] [/align]
[align=left] AbstractPrototype x;[/align]
[align=left] x = internalPrototype.CloneYourself();[/align]
[align=left] // now we have two instances of the class which as as a prototype[/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] public static int Main(string[] args)[/align]
[align=left] { [/align]
[align=left] Demo demo = new Demo();[/align]
[align=left] MyPrototype clientPrototype = new MyPrototype();[/align]
[align=left] demo.SetPrototype(clientPrototype);[/align]
[align=left] demo.SomeImportantOperation();[/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]

AAbstractPrototype
AAbstractPrototype a_CloneYourself()

CMyPrototype: AAbstractPrototype
AAbstractPrototype o_CloneYourself()

CDemo -> AAbstractPrototype[_internalPrototype]
SetPrototype(AAbstractPrototype)
SomeImportantOperation()

CClient
main

CClient.main
{
CDemo demo.();
CMyPrototype clientPrototype.();
demo.SetPrototype(_internalPrototype = clientPrototype);
demo.SomeImportantOperation()
{
AAbstractPrototype x = _internalPrototype.CloneYourself();
};
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: