设计模式学习02-工厂方法模式

工厂方法模式

通过产品类的抽象使其创建业务主要负责用于创建多类产品的实例


简单工厂模式如果需求简单直接创建对象即可,但是随着需求变得复杂,如果用简单工厂模式,那么要添加各种各样的类别,还要修改工厂模式,比如简单工厂模式的

	var sportsFactory = function(name) {
		switch(name) {
			case 'NBA':
				return new BasketBall();
			case 'wordCup':
				return new FootBall();	
		}
	}

随着类别增加需要不断的修改switch里面代码,所以下面引出工厂方法模式。


一、安全模式类

比如我们创建了一个类,所以用new来实例化,但是其他人可能不知道这个是个类,直接调用的,这样就会发生错误,所以非安全类的例子如下

	var NoSafe = function() {}
	NoSafe.prototype = {
		show: function() {
			console.log("安全");
		}
	}
	var s = NoSafe();
	s.show(); // 报错

解决方案很简单,就是在构造函数开始的时候判断当前对象this指代是不是类,如果是则通过new创建对象,否则就是类在全局作用域中执行的,也就是此时this指向的是window,所以这么改

	var Safe = function() {
		if (!(this instanceof Safe)) {
			return new Safe();
		}
	}
	Safe.prototype = {
		show: function() {
			console.log("安全");
		}
	}
	var s = Safe();
	s.show(); // 可以获取到

二、安全的工厂模式

代码如下(示例):

	var Factory = function(type, content) {
		if (this instanceof Factory) {
			var s = new this[type](content);
			return s;
		} else {
			return new Factory(type, content);
		}
	}
	// 工厂设置所有类型数据对象的基类
	Factory.prototype = {
		FootBall: function() {
			.....
		},
		BasketBall: function() {....},
		Volleyball: function() {....}
	}
	// 添加数据
	var data = [
		{type: 'FootBall', content: "足球"},
		{type: 'BasketBall', content: "蓝球"},
		{type: 'Volleyball', content: "排球"}
	];
	for (var i = 3; i >= 0; i--) {
		Factory(data[i].type, data[i].content);
	}
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值