为了账号安全,请及时绑定邮箱和手机立即绑定

设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript

标签:
设计模式

设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript

简单工厂模式

定义一个接口,三个具体类。然后书写如下,通过选择,生产出相应的对象

// 定义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();

抽象工厂

抽象工厂比较简单不在阐述。
www.iming.info

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消