内容简介:定义一个接口,三个具体类。然后书写如下,通过选择,生产出相应的对象编译后的js如下即,将工厂拆分
定义一个接口,三个具体类。然后书写如下,通过选择,生产出相应的对象
// 定义Shape接口 interface Shape { draw():void; } // 下面为产品类 // 产品 Circle class Circle implements Shape{ public constructor(){ } public draw():void{ } } // 产品Rectangle class Rectangle implements Shape{ public constructor(){ } public draw():void{ } } // 下面为生产产品的工厂,根据选择,生产出不同的产品 class ShapeFactory { constructor(){ } public static getShape(typeShape:string):Shape{ if(typeShape === "Circle"){ return new Circle(); } if (typeShape === "Rectangle"){ return new Rectangle(); } if (typeShape === null){ return null; } return null; } } // 下面编写测试 let test:Shape = ShapeFactory.getShape("Circle"); // 调用draw方法 test.draw(); 复制代码
编译后的js如下
// 下面为产品类 // 产品 Circle var Circle = /** @class */ (function () { function Circle() { } Circle.prototype.draw = function () { }; return Circle; }()); // 产品Rectangle var Rectangle = /** @class */ (function () { function Rectangle() { } Rectangle.prototype.draw = function () { }; return Rectangle; }()); // 下面为生产产品的工厂,根据选择,生产出不同的产品 var ShapeFactory = /** @class */ (function () { function ShapeFactory() { } ShapeFactory.getShape = function (typeShape) { if (typeShape === "Circle") { return new Circle(); } if (typeShape === "Rectangle") { return new Rectangle(); } if (typeShape === null) { return null; } return null; }; return ShapeFactory; }()); // 下面编写测试 var test = ShapeFactory.getShape("Circle"); // 调用draw方法 test.draw(); 复制代码
利用反射改进
class ShapeFactory1 { constructor(){ }; public static getShape<T extends Shape>(c:{new ():T}):T{ // C类型为类 return new c(); } } let test = ShapeFactory1.getShape(Circle); test.draw(); 复制代码
var ShapeFactory1 = /** @class */ (function () { function ShapeFactory1() { } ; ShapeFactory1.getShape = function (c) { return new c(); }; return ShapeFactory1; }()); var test = ShapeFactory1.getShape(Circle); test.draw(); 复制代码
工厂方法
即,将工厂拆分
// 工厂方法 class CircleFactory{ constructor(){ } public static getShape():Shape{ return new Circle(); } } class RectangleFactory{ constructor(){ } public static getShape():Shape{ return new Rectangle(); } } let test = CircleFactory.getShape(); test.draw(); 复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 设计模式-简单工厂、工厂方法模式、抽象工厂模式
- 简单工厂模式、工厂模式、抽象工厂模式的解析-iOS
- Java 设计模式之工厂方法模式与抽象工厂模式
- 设计模式之工厂模式(为什么很多人觉得工厂模式没有用)
- 设计模式 —— 工厂模式
- 设计模式 -- 工厂模式
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Art of Computer Programming, Volumes 1-3 Boxed Set
Donald E. Knuth / Addison-Wesley Professional / 1998-10-15 / USD 199.99
This multivolume work is widely recognized as the definitive description of classical computer science. The first three volumes have for decades been an invaluable resource in programming theory and p......一起来看看 《The Art of Computer Programming, Volumes 1-3 Boxed Set》 这本书的介绍吧!