【oop】工厂模式
// 简单工厂
var IphoneFactory = function(color, version){ var iphone = new function() {}; iphone.color = color; iphone.version = version; iphone.show = function() { console.log(`我是[${iphone.color}]的[iphone${iphone.version}]手机`); } return iphone; } var iphone6 = IphoneFactory('红色', 6); iphone6.show();
//工厂方法
var AppleFactory = function(type, devise){ if(this instanceof AppleFactory) { if(this[type] && typeof this[type] === 'function'){ var product = new this[type] (devise); return product; } console.log('苹果暂时不生产这种产品'); return null; } else { return new AppleFactory(type, devise) } } AppleFactory.prototype = { iphone: function(devise) { var iphone = new function() {}; iphone.color = devise.color; iphone.version = devise.version; iphone.show = function() { console.log(`我是[${iphone.color}]的[iphone${iphone.version}]手机`); } return iphone; } } var iphone4 = AppleFactory('iphone', {color: '白色', version: '4'}); iphone4.show();
// 抽象工厂
const VehicleFactory = function(AppleFactory, AppleType) { if (typeof VehicleFactory[AppleType] === 'function') { function Factory() { } Factory.prototype = new VehicleFactory[AppleType]() AppleFactory.constructor = AppleFactory AppleFactory.prototype = new Factory() } else throw new Error('不存在该抽象类') } VehicleFactory.IphoneFactory = function() { this.type = 'ApplePhone' } VehicleFactory.IphoneFactory.prototype = { makeIphone: function() { return new Error('抽象方法不可使用') } } const Iphone = function(color, version) { this.color = color this.version = version } VehicleFactory(Iphone, 'IphoneFactory') Iphone.prototype.makeIphone = function() { console.log('生产Iphone') } const IphoneX = new Iphone('黑色', 'X') IphoneX.makeIphone() console.log(IphoneX instanceof VehicleFactory.IphoneFactory)

浙公网安备 33010602011771号