js 工厂模式

工厂模式是管理对象的一种设计模式,通过向外提供一个公共方法用于创建对象。把使用对象的部分与创建对象的部分分离,创建对象部分与对象创建前的初始化分离,职责分离。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());

 

转载于:https://www.cnblogs.com/fe-huahai/p/5744607.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值