理解工厂模式

工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单的工厂模式可以理解为解决多个相似的问题。

  1. function CreatePerson(name,age,sex) {
  2. var obj = new Object();
  3. obj.name = name;
  4. obj.age = age;
  5. obj.sex = sex;
  6. obj.sayName = function(){
  7. return this.name;
  8. }
  9. return obj;
  10. }
  11. var p1 = new CreatePerson("longen",'28','男');
  12. var p2 = new CreatePerson("tugenhua",'27','女');
  13. console.log(p1.name); // longen
  14. console.log(p1.age); // 28
  15. console.log(p1.sex); // 男
  16. console.log(p1.sayName()); // longen
  17. console.log(p2.name); // tugenhua
  18. console.log(p2.age); // 27
  19. console.log(p2.sex); // 女
  20. console.log(p2.sayName()); // tugenhua
  21. // 返回都是object 无法识别对象的类型 不知道他们是哪个对象的实列
  22. console.log(typeof p1); // object
  23. console.log(typeof p2); // object
  24. console.log(p1 instanceof Object); // true

函数CreatePerson能接受三个参数name,age,sex等参数,可以无数次调用这个函数,每次返回都会包含三个属性和一个方法的对象。
工厂模式是为了解决多个类似对象声明的问题;也就是为了解决实列化对象产生重复的问题。
优点:能解决多个相似的问题。
缺点:不能知道对象识别的问题(对象的类型不知道)。

复杂的工厂模式:

将其成员对象的实列化推迟到子类中,子类可以重写父类接口方法以便创建的时候指定自己的对象类型。
父类只对创建过程中的一般性问题进行处理,这些处理会被子类继承,子类之间是相互独立的,具体的业务逻辑会放在子类中进行编写。父类就变成了一个抽象类,但是父类可以执行子类中相同类似的方法,具体的业务逻辑需要放在子类中去实现;比如我现在开几个自行车店,那么每个店都有几种型号的自行车出售。我们现在来使用工厂模式来编写这些代码;
父类的构造函数如下: