JavaScript设计模式———简单工厂模式
简单工厂模式(Simple Factory),又叫静态工厂方法,由一个工厂对象来决定创建某一种产品对象类的实例,主要用来创建同一类对象。
实际案例:
比如你去水果店购买各种水果
优点:
- 类型之间的解耦
缺点:
- 增加了与产品类平行的工厂类,也会增加很多额外的代码。
- 当需要增加子类的时候,需要修改工厂类,违背了开放-封闭原则 。
例子一(通过类实例化对象创建):
//比如说一个水果店,里面有很多种类的水果
//苹果基类
var Apple = function() {
this.descr = '苹果有“智慧果”、“记忆果”的美称';
}
Apple.prototype = {
getPrice : function() {
console.log('10元一斤');
},
getArea : function() {
console.log('源产地美国')
}
}
//梨基类
var Pear = function() {
this.descr = ' 梨是最常见的水果之一,秋天吃梨有润肺除燥的功效'
}
Pear.prototype = {
getPrice : function() {
console.log('8元一斤');
},
getArea : function() {
console.log('源产地华北地区')
}
}
//草莓基类
var Strawberry = function() {
this.descr = ' 常吃草莓不仅能有效防止健康细胞发生癌变,还可以降低患乳腺癌、结肠癌、前列腺癌的风险'
}
Strawberry.prototype = {
getPrice : function() {
console.log('20元一斤');
},
getArea : function() {
console.log('源产地亚热带地区')
}
}
//水果店
var fruitShop = function(name) {
switch(name) {
case 'A':
return new Apple();
case 'P':
return new Pear();
case 'S':
return new Strawberry()
}
}
var apple = fruitShop('A');
例子一(创建一个新对象然后包装增强其属性和功能):
//创建一本书
function cearteBook(name,time,type) {
var o = new Object();
o.name = name;
o.time = time;
o.type = type;
o.getName = function() {
console.log(this.name);
}
return o;
}
var book1 = createBook('js book',2017,'js');
var boo2 = createBook('css book',2017,'css');
book1.getName();
book2.getName();
这两个例子创建简单工厂模式有区别,第一种是通过类实例化对象创建的,第二种是创建一个新对象然后包装增强其属性和功能来实现的。
总结
简单工厂模式:用于把作用相似的一系列类和模块进行封装,根据需求返回开发者想要的基类实例。
简单工厂模式的使用场合,限制在创建单一对象时。
通过简单工厂模式来创建一些对象,可以让这些对象共用一些资源,而又能拥有一些私有资源。