• 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());
  • 相关阅读:
    邂逅明下(巴什博弈+hdu2897)
    抽象接口的过程小结
    线程经常使用操作
    对继承的再次理解
    阿里Java开发手冊之编程规约
    [持续更新]Windows Programming常见Hungarian Notation/Abbreviation大全
    [转]__cdecl与__stdcall
    private继承的作用
    [转]C++中的三种继承public,protected,private
    如何只利用NMAKE+CL+LINK写WIN32程序
  • 原文地址:https://www.cnblogs.com/fe-huahai/p/5744607.html
Copyright © 2020-2023  润新知