JavaScript也有设计模式(一)——简单工厂模式

来源:互联网 发布:箱体捉妖指标公式源码 编辑:程序博客网 时间:2024/06/17 20:38

如果希望代码向人一样,能够成长,那么设计模式是必不可少的。今天接触第一个设计模式,属于创建型设计模式——简单工厂设计模式

需求:如果我希望要一个弹框,我的js应该怎么写?

        // 如果我需要一个弹框        function Pop(text){            this.content = text;        }        Pop.prototype.show = function(){            //显示弹框        };        // 测试        var pop = new Pop("请输入内容");        pop.show();

上例用对象的方式,创建了一个弹框的对象。那么,如果我需要不通类型的弹框呢,比如:提示框,警告框,确认框。。。该怎么做?

可以创建三个对象,然后用哪个就创建哪个。

        // 提示框对象        function AlertPop(text){            this.content = text;        }        AlertPop.prototype.show = function(){            //显示弹框        };        // 警告框        function WarnPop(text){            this.content = text;        }        WarnPop.prototype.show = function(){            //显示弹框        };        // 确认框        function ConfirmPop(text){            this.content = text;        }        ConfirmPop.prototype.show = function(){            //显示弹框        };        // 测试        var ap = new AlertPop("您的内容有误");        var wp = new WarnPop("可能有问题哦");        var cp = new ConfirmPop("您确定吗");        ap.show();        wp.show();        cp.show();

但是如果这样,我们每次使用都要找对应的类,太麻烦了,可不可以统一管理呢?

第一种方式 用工厂管理创建对象

用一个工厂对象将创建实例的动作封装起来,对外只暴露工厂对象

        var PopFactory = function(name){            switch (name){                case 'alert':                    return new AlertPop("您的内容有误");                case 'warn':                    return new WarnPop("可能有问题哦");                case 'confirm':                    return new ConfirmPop("您确定吗");            }        }

第二种方式 用工厂管理差异部分

在创建弹框的时候,公共的部分抽取出来,判断管理各自的私有部分

        function createPop(type,text){            var o = new Object();            o.content = text;            o.show = function(){                // 显示方法            };            if(type == 'alert'){                // 提示弹框差异部分            }            if(type == 'warn'){                // 警告弹框差异部分            }            if(type == 'confirm'){                // 确认框差异部分            }            return o;        }        var a = createPop('alert','内容有误')

两种方式有一定区别:
1 第一种方式,弹框是实例化对象创建的;第二种 则是 创建一个新对象,然后不断增强属性和方法。
2 第一种方式,如果三个类继承同一个父,那么父的原型方法可以复用;而第二种 就是单独的一个对象
3 第一种方式,扩展更灵活;第二种,如果弹框变化很大,很可能要拆解代码
4 第一种方式实现起来更复杂;第二种相对简单

使用时,根据需求而定。

1 0
原创粉丝点击