• 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());
  • 相关阅读:
    很漂亮的按钮css样式(没有用到图片,可直接拷贝代码使用)
    if、while中变量的作用域问题
    笔记
    搭建高可用mongodb集群(一)——配置mongodb
    Java编程:删除 List 元素的三种正确方法
    MySQL 数据类型
    MySQL 通用查询日志(General Query Log)
    mysql 创建一个用户,指定一个数据库
    MySQL 5.7 免安装版配置
    String,StringBuffer与StringBuilder的区别??
  • 原文地址:https://www.cnblogs.com/fe-huahai/p/5744607.html
Copyright © 2020-2023  润新知