Web前端之路让前端飞程序员

给我一张名片-工厂方法模式

2017-04-28  本文已影响48人  YukiYang

工厂方法模式

通过对产品类的抽象使其创建业务主要负责用于多类产品的实例。

安全模式类

安全模式类是说可以屏蔽错误的使用类而造成的错误。
比如对于一个类的创建,实例化一个对象需要 new 关键字,但是你的合作者可能不知道这是一个类,那么在使用的时候可能忘记加new关键字。如下:

var Demo = function () {
    };
    Demo.prototype = {
        show: function () {
            console.log("成功获取!");
        }
    }
    var d = new Demo();
    d.show();//成功获取!
    var d = Demo();
    d.show();//Uncaught TypeError: Cannot read property 'show' of undefined

安全模式就是为了解决这个问题。如下:

var Demo = function () {
        if (!(this instanceof Demo)) {
            return new Demo();
        }
    }
    Demo.prototype = {
        show: function () {
            console.log("成功获取!");
        }
    }
    var d = Demo();
    d.show();//成功获取!

安全的工厂方法

//安全模式创建的工厂类
    var Factory = function (type, content) {
        if (this instanceof Factory) {
            var s = new this[type](content);
            return s;
        } else {
            return new Factory(type, content);
        }
    }

    //工厂原型中设置创建所有类型数据对象的基类
    Factory.prototype = {
        Java: function (content) {
            //......
        },
        JavaScript: function (content) {
            //......
        },
        UI: function (content) {
            //......
        }
    }
    //模拟数据
     var data = [
        {
            type:'JavaScript',
            content:'JavaScript哪家强'
        },
        {
            type:'Java',
            content:'Java哪家强'
        },
        {
            type:'UI',
            content:'UI哪家强'
        }
    ];
    //格式友好,快速完成需求
    for (var i = 0; i++; i < 2) {
        Factory(s[i].type, s[i].content);
    }

对于创建多类对象,简单工厂就不太适合了。工厂方法模式我们可以轻松创建多个类的实例,我们不必关心创建该对象的具体类,只要调用工厂模式即可。

如果其他人不小心错误的调用工厂格式,这样就有可能通过工厂方法执行中的this对象为全局对象添加变量,并且得不到期望的实例对象,所以安全的工厂模式可以给我们吃一个定心丸。

摘自:《JavaScript设计模式》 张容铭著

上一篇 下一篇

猜你喜欢

热点阅读