前端设计模式之工厂模式

工厂模式就是用来创建对象的模式。分为:1.简单工厂;2.工厂方法;3.抽象工厂
1.简单工厂

	let  factory = function (type) {
		function basketball() {
		    this.text = '篮球'
		}
		function football() {
		    this.text = '足球'
		}
		switch(type) {
		    case 'basketball':
		    return new basketball();
		    break;
		    case 'football':
		    return new football();
		    break;
		    default:
		    throw new Error('错误')
		}
	}

	let basketball = factory('basketball');
	let football = factory('football');

简单工厂就是根据参数不同生成不同的对象
2.工厂方法

	let factory = function (type) {
	    if(this instanceof factory) {
	        var s = new this[type]();
	        return s;
	    } else {
	        return new factory(type);
	    }
	}
	factory.prototype = {
	    basketball: function() {
	        this.text = '篮球'
	    },
	    football: function() {
	        this.text = '足球'
	    }
	}
	let basketball = factory('basketball');
	let football = factory('football');

简单工厂在做修改时需要修改两处而工厂方法只需要修改原型即可,工厂方法只做实例化
3.抽象工厂

	let agency = function(subType, superType) {
	  //判断抽象工厂中是否有该抽象类
	  if(typeof agency[superType] === 'function') {
	    function F() {};
	    //继承父类属性和方法
	    F.prototype = new agency[superType] ();
	    //将子类的constructor指向子类
	    subType.constructor = subType;
	    //子类原型继承父类
	    subType.prototype = new F();
	
	  } else {
	    throw new Error('未创建抽象类!')
	  }
	}
	agency.car = function() {
	  this.type = 'car';
	}
	agency.car.prototype = {
	  getName: function() {
	    return new Error('抽象方法不能调用');
	  }
	}
	agency.bus = function() {
	  this.type = 'bus';
	}
	agency.bus.prototype = {
	  getName: function() {
	    return new Error('抽象方法不能调用');
	  }
	}
	var BMW = function (name) {
		this.name = name
	}
	agency(BMW, 'car')
	BAM.prototype.getName = function () {
		return this.name
	}
	let carBMW = new BAM('宝马')

抽象工厂用来创建一类产品簇,子产品继承产品簇并重写必须函数,否则报错也是一直安全检验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值