Skip to content

Commit 7a82472

Browse files
committed
Add abstractFactory demo
1 parent efb27ab commit 7a82472

File tree

2 files changed

+91
-87
lines changed

2 files changed

+91
-87
lines changed
Lines changed: 73 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,87 +1,73 @@
1-
namespace AbstractFactoryPattern {
2-
export interface AbstractProductA {
3-
methodA(): string;
4-
}
5-
export interface AbstractProductB {
6-
methodB(): number;
7-
}
8-
9-
export interface AbstractFactory {
10-
createProductA(param?: any) : AbstractProductA;
11-
createProductB() : AbstractProductB;
12-
}
13-
14-
15-
export class ProductA1 implements AbstractProductA {
16-
methodA = () => {
17-
return "This is methodA of ProductA1";
18-
}
19-
}
20-
export class ProductB1 implements AbstractProductB {
21-
methodB = () => {
22-
return 1;
23-
}
24-
}
25-
26-
export class ProductA2 implements AbstractProductA {
27-
methodA = () => {
28-
return "This is methodA of ProductA2";
29-
}
30-
}
31-
export class ProductB2 implements AbstractProductB {
32-
methodB = () => {
33-
return 2;
34-
}
35-
}
36-
37-
38-
export class ConcreteFactory1 implements AbstractFactory {
39-
createProductA(param?: any) : AbstractProductA {
40-
return new ProductA1();
41-
}
42-
43-
createProductB(param?: any) : AbstractProductB {
44-
return new ProductB1();
45-
}
46-
}
47-
export class ConcreteFactory2 implements AbstractFactory {
48-
createProductA(param?: any) : AbstractProductA {
49-
return new ProductA2();
50-
}
51-
52-
createProductB(param?: any) : AbstractProductB {
53-
return new ProductB2();
54-
}
55-
}
56-
57-
58-
export class Tester {
59-
private abstractProductA: AbstractProductA;
60-
private abstractProductB: AbstractProductB;
61-
62-
constructor(factory: AbstractFactory) {
63-
this.abstractProductA = factory.createProductA();
64-
this.abstractProductB = factory.createProductB();
65-
}
66-
67-
public test(): void {
68-
console.log(this.abstractProductA.methodA());
69-
console.log(this.abstractProductB.methodB());
70-
}
71-
}
72-
73-
}
74-
75-
(function main() {
76-
77-
// Abstract factory1
78-
var factory1: AbstractFactoryPattern.AbstractFactory = new AbstractFactoryPattern.ConcreteFactory1();
79-
var tester1: AbstractFactoryPattern.Tester = new AbstractFactoryPattern.Tester(factory1);
80-
tester1.test();
81-
82-
// Abstract factory2
83-
var factory2: AbstractFactoryPattern.AbstractFactory = new AbstractFactoryPattern.ConcreteFactory2();
84-
var tester2: AbstractFactoryPattern.Tester = new AbstractFactoryPattern.Tester(factory2);
85-
tester2.test();
86-
87-
}());
1+
namespace AbstractFactoryPattern {
2+
export interface AbstractProductA {
3+
methodA(): string;
4+
}
5+
export interface AbstractProductB {
6+
methodB(): number;
7+
}
8+
9+
export interface AbstractFactory {
10+
createProductA(param?: any) : AbstractProductA;
11+
createProductB() : AbstractProductB;
12+
}
13+
14+
15+
export class ProductA1 implements AbstractProductA {
16+
methodA = () => {
17+
return "This is methodA of ProductA1";
18+
}
19+
}
20+
export class ProductB1 implements AbstractProductB {
21+
methodB = () => {
22+
return 1;
23+
}
24+
}
25+
26+
export class ProductA2 implements AbstractProductA {
27+
methodA = () => {
28+
return "This is methodA of ProductA2";
29+
}
30+
}
31+
export class ProductB2 implements AbstractProductB {
32+
methodB = () => {
33+
return 2;
34+
}
35+
}
36+
37+
38+
export class ConcreteFactory1 implements AbstractFactory {
39+
createProductA(param?: any) : AbstractProductA {
40+
return new ProductA1();
41+
}
42+
43+
createProductB(param?: any) : AbstractProductB {
44+
return new ProductB1();
45+
}
46+
}
47+
export class ConcreteFactory2 implements AbstractFactory {
48+
createProductA(param?: any) : AbstractProductA {
49+
return new ProductA2();
50+
}
51+
52+
createProductB(param?: any) : AbstractProductB {
53+
return new ProductB2();
54+
}
55+
}
56+
57+
58+
export class Tester {
59+
private abstractProductA: AbstractProductA;
60+
private abstractProductB: AbstractProductB;
61+
62+
constructor(factory: AbstractFactory) {
63+
this.abstractProductA = factory.createProductA();
64+
this.abstractProductB = factory.createProductB();
65+
}
66+
67+
public test(): void {
68+
console.log(this.abstractProductA.methodA());
69+
console.log(this.abstractProductB.methodB());
70+
}
71+
}
72+
73+
}

abstract_factory/demo.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/// <reference path="abstractFactory.ts" />
2+
3+
namespace AbstractFactoryPattern {
4+
export namespace Demo {
5+
export function show() {
6+
// Abstract factory1
7+
var factory1: AbstractFactoryPattern.AbstractFactory = new AbstractFactoryPattern.ConcreteFactory1();
8+
var tester1: AbstractFactoryPattern.Tester = new AbstractFactoryPattern.Tester(factory1);
9+
tester1.test();
10+
11+
// Abstract factory2
12+
var factory2: AbstractFactoryPattern.AbstractFactory = new AbstractFactoryPattern.ConcreteFactory2();
13+
var tester2: AbstractFactoryPattern.Tester = new AbstractFactoryPattern.Tester(factory2);
14+
tester2.test();
15+
}
16+
}
17+
}
18+

0 commit comments

Comments
 (0)