简单工厂模式,又称静态工厂方法,由一个工厂对象决定创建某一种产品对象类的实例。主要是用来创建同一类对象。
1 // 简单工厂模式
2 // 登录警示框类,提示输入内容不符合规范
3 var LoginAlert = function(text) {
4 this.content = text;
5 }
6 LoginAlert.prototype.show = function() {
7 console.log(this.content);
8 }
9
10 // 登录警示框增加注册按钮,用户不存在时可以注册账号
11 var LoginConfirm = function(text) {
12 this.content = text;
13 this.confirm = true;
14 }
15 LoginConfirm.prototype.show = function() {
16 console.log(this.content);
17 }
18
19 // 登录成功后,显示的提示框有个确认按钮
20 var LoginPrompt = function(text) {
21 this.content = text;
22 this.isLogin = true;
23 }
24 LoginPrompt.prototype.show = function() {
25 console.log(this.content);
26 }
27
28 // 简单工厂模式
29 var PopFactory = function(name, content) {
30 switch(name) {
31 case 'alert': {
32 return new LoginAlert(content)
33 }
34 case 'confirm': {
35 return new LoginConfirm(content);
36 }
37 case 'prompt': {
38 return new LoginPrompt(content);
39 }
40 }
41 }
42
43 // 测试类
44 var userAlert = new PopFactory('alert', '用户名不能多于16个数字或字母');
45 userAlert.show();
46
47 var userConfirm = new PopFactory('confirm', '您的用户名不存在,请重新输入');
48 userConfirm.show();
49
50 var userPrompt = new PopFactory('prompt', '欢迎回来');
51 userPrompt.show();
一个对象有时也能代替许多类。简单工厂模式的理念就是创建对象,对不同的类实例化。不过除此之外简单工厂模式还可以用来创建相似对象,把相似的东西提取出来,不相似的针对性处理。有点像继承是的寄生模式,只是这里没有父类,无需任何继承,简单创建一个对象,通过对这个对象大量拓展方法和属性,并在最终将对象返回出来。
1 // 一个对象代替许多类
2 function createPop(type, text) {
3 // 创建一个对象,并对对象拓展属性和方法
4 var o = new Object();
5 o.content = text;
6 o.show = function() {
7 console.log(o.content);
8 }
9 if(type == 'alert') {
10
11 }
12 if(type == 'prompt') {
13 o.isLogin = true;
14 }
15 if(type == 'confirm') {
16 this.confirm = true;
17 }
18 return o;
19 }
20
21 // 测试类
22 var userNameAlert = createPop('alert', '用户名不能多于26个数字或字母');
23 userNameAlert.show();
两种方法比较
1、区别:第一种通过类实例化对象创建的,第二种是通过创建一个新对象然后包装增强其属性和功能来实现的。
2、后果:它们之间的差异性也造成了前面通过类创建属性的,如果这些类继承同一个父类,那么它们父类原型上的方法是共用的。而后面寄生方式创建的对象都是一个新的个体,所以他们的方法就不能共用了。
参考资料:《JavaScript设计模式》