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();
};
}
[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();
};
}
相关文章推荐
- Patterns in SOME –Iterator
- Patterns in SOME –Decorator
- use AWK to extract some lines according to some patterns in file
- Patterns in SOME – Command
- Patterns in SOME –Composite
- Patterns in SOME - Visitor
- Patterns in SOME –Chain Of Responsibility
- Patterns in SOME –Bridge
- Patterns in SOME - Strategy
- Patterns in SOME –Template Method
- Patterns in SOME –Adapter (class)
- Patterns in SOME –State
- Patterns in SOME –Interpreter
- Patterns in SOME –Singleton
- Patterns in SOME –Observer
- Patterns in SOME –Proxy
- Patterns in SOME –Builder
- Patterns in SOME –Memento
- Patterns in SOME –Flyweight
- Patterns in SOME –Abstract Factory