码迷,mamicode.com
首页 > Web开发 > 详细

js 工厂模式

时间:2016-08-06 23:13:03      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

工厂模式是管理对象的一种设计模式,通过向外提供一个公共方法用于创建对象。把使用对象的部分与创建对象的部分分离,创建对象部分与对象创建前的初始化分离,职责分离。jQuery.Callbacks是一个工厂,每次调用都会返回一个对象,并且根据传入的不同参数值返回的对象具有不同的特征。

1.简单工厂模式

在工厂方法中,根据传入的参数创建相应的对象,并且返回。

  function Orange(){
        this.color = ‘orange‘;
    }
    function Apple(){
        this.color = ‘red‘;
    }
    function Banana(){
        this.color = ‘yellow‘;
    }
    // 创建对象的工厂
    function SimpleFactory(type){
        var fruit = null;
        switch(type){
            case ‘orange‘:
                fruit = new Orange();
                break;
            case ‘apple‘:
                fruit = new Apple();
                break;
            case ‘banana‘:
                fruit = new Banana();
        }
        return fruit;
    }

    //测试
    var apple = SimpleFactory(‘apple‘);
    console.log(apple.color);
    var banana = SimpleFactory(‘banana‘);
    console.log(banana.color);

 简单工厂模式只能产生工厂方法中指定类型的对象,当需要添加其他类型的对象时,需要在工厂方法中添加相对应的代码。

2.工厂模式

工厂模式对简单工厂模式改进,可以扩展新的类型的对象,并且不用修改工厂方法。

  function Fruit(){}
    Fruit.prototype.say = function(){
        return ‘hello,my name is ‘ + this.name;
    }
    Fruit.Apple = function (){
        this.name = ‘apple‘;
    }
    Fruit.Banana = function(){
        this.name = ‘banana‘;
    }
    Fruit.Orange = function(){
        this.name = ‘orange‘;
    }
    Fruit.factory = function(type){
        var fruit = null;
        //如果构造函数不存在,返回
        if(typeof Fruit[type] !== ‘function‘){
            return;
        }
        //使用原型继承父类
        if(typeof Fruit[type].prototype.getColor !== ‘function‘){
            Fruit[type].prototype = new Fruit();
        }
        //创建对象
        fruit = new Fruit[type]();
        return fruit;
    }

    //测试
    var apple = Fruit.factory("Apple");
    console.log(apple.say());

 

js 工厂模式

标签:

原文地址:http://www.cnblogs.com/fe-huahai/p/5744607.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!