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

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

需求:如果我希望要一个弹框,我的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 第一种方式实现起来更复杂;第二种相对简单

使用时,根据需求而定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值