简单工厂模式(Simple Factory),又叫静态工厂方法,由一个工厂对象决定创建某一种产品对象类的实例。
主要用来创建同一类对象
1 如果类太多,那么提供一个
“你给了我 3 个类,在每次创建的时还要找到对应的类,太麻烦了。所以你最好封装在一个函数里,这样我只需要记住这个函数,然后通过这个函数就可以创建我所需要的对象。
这函数也被称为工厂函数,这种模式叫简单工厂模式。”
// 篮球基类
var Basketball = function() {
this.intro = '篮球盛行于美国';
}
Basketball.prototype = {
getMember: function() {
console.log('每个队伍需要5名队员');
},
getBallSize: function() {
console.log('篮球很大');
}
}
// 足球基类
var Football = function() {
this.intro = '足球在世界范围内很流行';
}
Football.prototype = {
getMember: function() {
console.log('每个队伍需11名队员');
},
getBallSize: function() {
console.log('足球很大');
}
}
// 网球基类
var Tennis = function() {
this.intro = '每年有很多网球系列赛';
}
Tennis.prototype = {
getMember: function() {
console.log('每个队伍需1名队员');
},
getBallSize: function() {
console.log('网球很小');
}
}
// 运动工厂
var SportFactory = function(name) {
switch(name) {
case 'NBA':
return new Basketball();
case 'wordCup':
return new Football();
case 'FreachOpen':
return new Tennis();
}
}
“当你想创建一个足球时,只需要记住 SportFactory 这个工厂对象就好了。”
var football = new SportFactory('wordCup');
console.log(football.intro);
football.getMember();
2 一个对象也可以代替许多类
“举个例子,比如你想创建一些书,那么这些书都有一些相似的地方,比如目录、页码等。也有一些不相似的地方,如书名、出版时间、类型等。
对于不同属性就要有针对性的处理了,如果我们将不同属性作为参数传递来处理。”
// 工厂模式
function createBook(name, time, type) {
// 创建一个对象,并拓展其属性和方法
var object = new Object();
object.name = name;
object.time = time;
object.type = type;
object.getName() {
console.log(this.name);
}
return object;s
}
// 使用如下
var book1 = createBook('js book', '2014', 'js')
var book2 = createBook('css book', '2013', 'css')
book1.getName(); // js book
book2.getName(); // css book
3 不同点
- 第一种通过实例化对象创建的。如果这些类继承同一个父类,那么他们的父类原型上的方法是可以共用的。
- 第二种通过创建一个对象然后包装增强其属性和方法来实现。所创建的方法都是一个新个体,所以他们的方法就不能共用了。