简单工厂模式(Simple Factory),又叫静态工厂方法,由一个工厂对象决定创建某一种产品对象类的实例
主要用来创建同一类对象

1 如果类太多,那么提供一个

“你给了我 3 个类,在每次创建的时还要找到对应的类,太麻烦了。所以你最好封装在一个函数里,这样我只需要记住这个函数,然后通过这个函数就可以创建我所需要的对象。
这函数也被称为工厂函数,这种模式叫简单工厂模式。”

  1. // 篮球基类
  2. var Basketball = function() {
  3. this.intro = '篮球盛行于美国';
  4. }
  5. Basketball.prototype = {
  6. getMember: function() {
  7. console.log('每个队伍需要5名队员');
  8. },
  9. getBallSize: function() {
  10. console.log('篮球很大');
  11. }
  12. }
  13. // 足球基类
  14. var Football = function() {
  15. this.intro = '足球在世界范围内很流行';
  16. }
  17. Football.prototype = {
  18. getMember: function() {
  19. console.log('每个队伍需11名队员');
  20. },
  21. getBallSize: function() {
  22. console.log('足球很大');
  23. }
  24. }
  25. // 网球基类
  26. var Tennis = function() {
  27. this.intro = '每年有很多网球系列赛';
  28. }
  29. Tennis.prototype = {
  30. getMember: function() {
  31. console.log('每个队伍需1名队员');
  32. },
  33. getBallSize: function() {
  34. console.log('网球很小');
  35. }
  36. }
  37. // 运动工厂
  38. var SportFactory = function(name) {
  39. switch(name) {
  40. case 'NBA':
  41. return new Basketball();
  42. case 'wordCup':
  43. return new Football();
  44. case 'FreachOpen':
  45. return new Tennis();
  46. }
  47. }

“当你想创建一个足球时,只需要记住 SportFactory 这个工厂对象就好了。”

  1. var football = new SportFactory('wordCup');
  2. console.log(football.intro);
  3. football.getMember();

2 一个对象也可以代替许多类

“举个例子,比如你想创建一些书,那么这些书都有一些相似的地方,比如目录、页码等。也有一些不相似的地方,如书名、出版时间、类型等。
对于不同属性就要有针对性的处理了,如果我们将不同属性作为参数传递来处理。”

  1. // 工厂模式
  2. function createBook(name, time, type) {
  3. // 创建一个对象,并拓展其属性和方法
  4. var object = new Object();
  5. object.name = name;
  6. object.time = time;
  7. object.type = type;
  8. object.getName() {
  9. console.log(this.name);
  10. }
  11. return object;s
  12. }
  13. // 使用如下
  14. var book1 = createBook('js book', '2014', 'js')
  15. var book2 = createBook('css book', '2013', 'css')
  16. book1.getName(); // js book
  17. book2.getName(); // css book

3 不同点

  • 第一种通过实例化对象创建的。如果这些类继承同一个父类,那么他们的父类原型上的方法是可以共用的。
  • 第二种通过创建一个对象然后包装增强其属性和方法来实现。所创建的方法都是一个新个体,所以他们的方法就不能共用了。