简单工厂模式(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 bookbook2.getName(); // css book
3 不同点
- 第一种通过实例化对象创建的。如果这些类继承同一个父类,那么他们的父类原型上的方法是可以共用的。
- 第二种通过创建一个对象然后包装增强其属性和方法来实现。所创建的方法都是一个新个体,所以他们的方法就不能共用了。
