zoukankan      html  css  js  c++  java
  • javascript工厂模式

    工厂模式

    设计工厂模式的目的是为了创建对象。它通常在类或者类的静态方法实现,具有下列目标:
    1.在创建相似对象是执行重复操作
    2.在编译时不知道具体类型(类)的情况下,为工厂客户提供一种创建对象的接口。
    通过工厂方法(或类)创建的对象在设计上都继承了相同的父对象这个思想,它们都是实现专门功能的特定子类。有时候公共父类是一个包含了工厂方法的同一个类、

    代码:

    //父构造函数
    function CarMaker(){};
    
    CarMaker.prototype.drive = function(){
        return 'Vroom, I have ' + this.doors +' doors';
    };
    //静态工厂方法
    CarMaker.factory = function(type){
        var constr = type,
            newcar;
    
        //如果构造函数不存在,则发生错误
        if(typeof CarMaker[constr] !== 'function'){
            throw{    
                name : 'Error',
                message : constr + "doesn't exist"
            }
        }
    
        //使得原型继承父类,但仅继承一次
        if(typeof CarMaker[constr].prototype.drive !== 'function'){
            CarMaker[constr].prototype = new CarMaker();
        }
    
        //创建一个新的实例
        newcar = new CarMaker[constr]();
    
        //可选择性的调用一些方法然后返回....
        return newcar;
    };
    //定义特定的汽车制作商
    CarMaker.Compact = function(){
        this.doors = 4;
    }
    CarMaker.Convertible = function(){
        this.doors = 2;
    };
    CarMaker.SUV = function(){
        this.doors = 24;
    };
    
    var corolla = CarMaker.factory('Compact');
    var solstice = CarMaker.factory('Convertible');
    var cherokee = CarMaker.factory('SUV');
    console.log( corolla.drive() );  //结果为'Vroom, I have 4 doors'
    console.log( solstice.drive() ); //结果为'Vroom, I have 2 doors'
    console.log( cherokee.drive() ); //结果为'Vroom, I have 24 doors'
  • 相关阅读:
    《那些年,我们拿下FPGA》做笔记
    三种初始化
    hdu4417 Super Mario 树阵离线/划分树
    【设计模式】文章摘要 查找联系人控件
    STL set
    阐述 QUEST CENTRAL FOR DB2 八罪
    使用线程执行堆栈StackTraceElement设计Android日志模块
    苹果iOS苹果公司的手机用户都有权索赔
    Android 4.4 沉浸式透明状态栏与导航栏
    常见的几种RuntimeException
  • 原文地址:https://www.cnblogs.com/fengzekun/p/3904352.html
Copyright © 2011-2022 走看看