zoukankan      html  css  js  c++  java
  • javascript模式——Factory

    Facotry模式是一种创建型模式,他不同于一般编码习惯,显示的调用各个构造函数。Factory模式是提供一个通用的接口来创建对象。

    一个Factory模式压缩所有对象创建的方式,降低这个工厂与其它对象的耦合。

    用一段代码来演示,我们用Factory模式做一家汽车工厂程序。

    // 工厂类
    var Factory = {
        createVehicle:function(type){
            var carFactory;
            switch(type){
                case 'car':
                    carFactory =  Object.create(this.Car);
                    break;
                case 'car':
                    carFactory =  Object.create(this.Truck);
                    break;
            }    
            return carFactory;
        },
        
        // 汽车类
        Car: {
            doors: 4,
        },
        
        // 卡车类
        Truck: {
            doors: 6,
            color: 'blue',
        }
        
        // 其它工厂类代码
    }
    
    // 实例化一个工厂
    var factory = Object.create(Factory);
    
    // 通过工厂的入口实例化汽车
    var car = factory.createVehicle('car');

    由代码可以看出,我们不是用Object.create(Factory.Car)或Object.create(Factory.Truck)显示创建相应实例,而是用一个createVehicle函数来管理,根据不同的参数调用不同的汽车类创建不同的实例。用这种方式,后面的程序创建汽车实例将只依赖factory.createVehicle这个入口函数,大大降低了耦合。

    由于IE8并不支持Object.create,我们可以用MDN提供的polyfill进行兼容处理。

    // Polyfill
    if (!Object.create) {  
        Object.create = function (o) {
            if (arguments.length > 1) {
                throw new Error('Object.create implementation only accepts the first parameter.');
            }
            function F() {}
            F.prototype = o;
            return new F();
        };
    }


    工厂方法一般是使用一个入口函数,运用switch语句进行不同产品实例的创建,所以,我们在创建实例的时候不用去考虑工厂里是如何实现的。

    而抽象工厂是在已经有若干个工厂的前提下,抽象出一个统一的接口,它把这些工厂生产的东西当做同一类。抽象工厂更像是一种策略。

    http://robdodson.me/javascript-design-patterns-factory/

  • 相关阅读:
    悟透JavaScript(理解JS面向对象的好文章)
    ClassLoader的等级加载机制
    ClassLoader的类结构分析
    如何实现自己的ClassLoader
    Servlet的ClassLoader
    idea远程调试linux下的tomcat
    centos VM 识别U盘
    linux yum 命令
    centos 基本操作(快捷键开户终端,复制,粘贴,yum命令)
    CentOS 配置Apache+Mysql+PHP (yum)与卸载
  • 原文地址:https://www.cnblogs.com/winderby/p/4323279.html
Copyright © 2011-2022 走看看