zoukankan      html  css  js  c++  java
  • 简单工厂模式

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

     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设计模式》

  • 相关阅读:
    如何确定软件测试结束?
    为什么会有软件测试这一栏目?
    SQL Server 新建 数据库关系图 时弹出警告提示此数据库没有有效所有者,因此无法安装数据库关系图支持对象。
    IIS 7 实现http跳转https 重定向方法
    Centos 利用yum安装卸载软件常用命令[转载]
    VMware虚拟机中Centos7的IP地址设置方法
    【3】工厂方法模式
    【2】简单工厂模式
    【1】Singleton模式(单例模式)
    SVN提交小结
  • 原文地址:https://www.cnblogs.com/daheiylx/p/13821265.html
Copyright © 2011-2022 走看看