public test(): void { console.log(this.abstractProductA.methodA()); console.log(this.abstractProductB.methodB()); } }
}
使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
namespace AbstractFactoryPattern { exportnamespace Demo { exportfunctionshow() { // Abstract factory1 var factory1: AbstractFactoryPattern.AbstractFactory = new AbstractFactoryPattern.ConcreteFactory1(); var tester1: AbstractFactoryPattern.Tester = new AbstractFactoryPattern.Tester(factory1); tester1.test();
// Abstract factory2 var factory2: AbstractFactoryPattern.AbstractFactory = new AbstractFactoryPattern.ConcreteFactory2(); var tester2: AbstractFactoryPattern.Tester = new AbstractFactoryPattern.Tester(factory2); tester2.test(); } } }
namespace PrototypePattern { exportnamespace Demo { exportfunctionshow() : void{ var builder : PrototypePattern.Builder = new PrototypePattern.Builder(); var i = 0; for (i = 1; i <= 3; i += 1) { console.log(builder.createOne("c" + i).toString()); }
exportclass Adaptee { public method(): void { console.log("`method` of Adaptee is being called"); } }
exportinterface Target { call(): void; }
exportclass Adapter implements Target { public call(): void { console.log("Adapter's `call` method is being called"); var adaptee: Adaptee = new Adaptee(); adaptee.method(); } } }
使用:
1 2 3 4 5 6 7 8 9
namespace AdapterPattern { exportnamespace Demo {
exportfunctionshow() : void{ var adapter: AdapterPattern.Adapter = new AdapterPattern.Adapter(); adapter.call(); } } }
h1 = new ChainOfResponsibilityPattern.ConcreteHandler1(3); h2 = new ChainOfResponsibilityPattern.ConcreteHandler2(7); h3 = new ChainOfResponsibilityPattern.ConcreteHandler3(20);
h1.setHandler(h2); h2.setHandler(h3);
for (i = 0, max = reqs.length; i < max; i += 1) { h1.operation("operation is fired!", reqs[i]); }
exportclass ConcreteImplementorA implements Implementor { public callee(s: any) : void { console.log("`callee` of ConcreteImplementorA is being called."); console.log(s); } }
exportclass ConcreteImplementorB implements Implementor { public callee(s: any) : void { console.log("`callee` of ConcreteImplementorB is being called."); console.log(s); } } }
使用:
1 2 3 4 5 6 7 8 9 10 11 12
namespace BridgePattern { exportnamespace Demo {
exportfunctionshow() : void{ var abstractionA: BridgePattern.Abstraction = new BridgePattern.RefinedAbstractionA(new BridgePattern.ConcreteImplementorA()); var abstractionB: BridgePattern.Abstraction = new BridgePattern.RefinedAbstractionB(new BridgePattern.ConcreteImplementorB());
exportclass Part1 { public method1(): void { console.log("`method1` of Part1"); } }
exportclass Part2 { public method2(): void { console.log("`method2` of Part2"); } }
exportclass Part3 { public method3(): void { console.log("`method3` of Part3"); } }
exportclass Facade { private part1: Part1 = new Part1(); private part2: Part2 = new Part2(); private part3: Part3 = new Part3();
public operation1(): void { console.log("`operation1` is called ==="); this.part1.method1(); this.part2.method2(); console.log("=========================="); }
public operation2(): void { console.log("`operation2` is called ==="); this.part1.method1(); this.part3.method3(); console.log("=========================="); } } }
使用:
1 2 3 4 5 6 7 8 9
namespace FacadePattern { exportnamespace Demo { exportfunctionshow() : void{ var facade: FacadePattern.Facade = new FacadePattern.Facade(); facade.operation1(); facade.operation2(); } } }
public doAction(): void { console.log("`doAction` of Proxy(", this.s, ")"); if (this.realSubject === null || this.realSubject === undefined) { console.log("creating a new RealSubject."); this.realSubject = new RealSubject(this.s); } this.realSubject.doAction(); } }
exportfunctionshow() : void{ var c1: TemplateMethodPattern.ConcreteClass1 = new TemplateMethodPattern.ConcreteClass1(), c2: TemplateMethodPattern.ConcreteClass2 = new TemplateMethodPattern.ConcreteClass2();
exportclass TerminalExpression implements AbstractExpression { public interpret(context: Context): void { console.log("`interpret` method of TerminalExpression is being called!"); } }
public storeAndExecute(cmd: Command) { this.commands.push(cmd); cmd.execute(); } }
exportclass Receiver { public action(): void { console.log("action is being called!"); } } }
(functionmain() { var receiver: CommandPattern.Receiver = new CommandPattern.Receiver(), command1: CommandPattern.Command = new CommandPattern.ConcreteCommand1(receiver), command2: CommandPattern.Command = new CommandPattern.ConcreteCommand2(receiver), invoker : CommandPattern.Invoker = new CommandPattern.Invoker();
exportfunctionshow() : void{ var receiver: CommandPattern.Receiver = new CommandPattern.Receiver(), command1: CommandPattern.Command = new CommandPattern.ConcreteCommand1(receiver), command2: CommandPattern.Command = new CommandPattern.ConcreteCommand2(receiver), invoker : CommandPattern.Invoker = new CommandPattern.Invoker();
exportfunctionshow() : void{ var cm: MediatorPattern.ConcreteMediator = new MediatorPattern.ConcreteMediator(), c1: MediatorPattern.ConcreteColleagueA = new MediatorPattern.ConcreteColleagueA(cm), c2: MediatorPattern.ConcreteColleagueB = new MediatorPattern.ConcreteColleagueB(cm);
namespace StatePattern { exportinterface State { handle(context: Context): void; }
exportclass ConcreteStateA implements State { public handle(context: Context): void { console.log("`handle` method of ConcreteStateA is being called!"); context.State = new ConcreteStateB(); } }
exportclass ConcreteStateB implements State { public handle(context: Context): void { console.log("`handle` method of ConcreteStateB is being called!"); context.State = new ConcreteStateA(); } }
exportclass Context { private state: State;
constructor(state: State) { this.state = state; }
get State(): State { returnthis.state; }
set State(state: State) { this.state = state; }
public request(): void { console.log("request is being called!"); this.state.handle(this); } } }
使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
namespace StatePattern { exportnamespace Demo {
exportfunctionshow() : void{ var context: StatePattern.Context = new StatePattern.Context(new StatePattern.ConcreteStateA()); context.request(); context.request(); context.request(); context.request(); context.request(); context.request(); context.request(); context.request();
get State(): State { console.log("get memento's state"); returnthis.state; } }
exportclass CareTaker { private memento: Memento;
get Memento(): Memento { returnthis.memento; }
set Memento(memento: Memento) { this.memento = memento; } } }
使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
namespace MementoPattern { exportnamespace Demo {
exportfunctionshow() : void{ var state: MementoPattern.State = new MementoPattern.State("... State "), originator: MementoPattern.Originator = new MementoPattern.Originator(state), careTaker: MementoPattern.CareTaker = new MementoPattern.CareTaker();
careTaker.Memento = originator.createMemento(); originator.State = new MementoPattern.State("something else...");
exportclass ConcreteVisitor1 implements Visitor { public visitConcreteElement1(concreteElement1: ConcreteElement1): void { console.log("`visitConcreteElement1` of ConcreteVisitor1 is being called!"); }
public visitConcreteElement2(concreteElement2: ConcreteElement2): void { console.log("`visitConcreteElement2` of ConcreteVisitor1 is being called!"); } }
exportclass ConcreteVisitor2 implements Visitor { public visitConcreteElement1(concreteElement1: ConcreteElement1): void { console.log("`visitConcreteElement1` of ConcreteVisitor2 is being called!"); }
public visitConcreteElement2(concreteElement2: ConcreteElement2): void { console.log("`visitConcreteElement2` of ConcreteVisitor2 is being called!"); } }
exportinterface Element { operate(visitor: Visitor): void; }
exportclass ConcreteElement1 implements Element { public operate(visitor: Visitor): void { console.log("`operate` of ConcreteElement1 is being called!"); visitor.visitConcreteElement1(this); } }
exportclass ConcreteElement2 implements Element { public operate(visitor: Visitor): void { console.log("`operate` of ConcreteElement2 is being called!"); visitor.visitConcreteElement2(this); } }
var v1: VisitorPattern.ConcreteVisitor1 = new VisitorPattern.ConcreteVisitor1(), v2: VisitorPattern.ConcreteVisitor2 = new VisitorPattern.ConcreteVisitor2();