`

js 简单工厂模式

 
阅读更多
/**
 * 简单工厂
 */
// Constructor.
//定义接口
var Interface = function(name, methods) {
    if(arguments.length != 2) {
        throw new Error("Interface constructor called with " + arguments.length
          + "arguments, but expected exactly 2.");
    }
    
    this.name = name;
    this.methods = [];
    for(var i = 0, len = methods.length; i < len; i++) {
        if(typeof methods[i] !== 'string') {
            throw new Error("Interface constructor expects method names to be " 
              + "passed in as a string.");
        }
        this.methods.push(methods[i]);        
    }    
};    

// Static class method.
//用来检测是否实现接口
Interface.ensureImplements = function(object) {
    if(arguments.length < 2) {
        throw new Error("Function Interface.ensureImplements called with " + 
          arguments.length  + "arguments, but expected at least 2.");
    }

    for(var i = 1, len = arguments.length; i < len; i++) {
        var interface = arguments[i];
        if(interface.constructor !== Interface) {
            throw new Error("Function Interface.ensureImplements expects arguments "   
              + "two and above to be instances of Interface.");
        }
        
        for(var j = 0, methodsLen = interface.methods.length; j < methodsLen; j++) {
            var method = interface.methods[j];
            if(!object[method] || typeof object[method] !== 'function') {
                throw new Error("Function Interface.ensureImplements: object " 
                  + "does not implement the " + interface.name 
                  + " interface. Method " + method + " was not found.");
            }
        }
    } 
};
// 创建接口
var Bicycle = new Interface("Bicycle",['assemble','wash','ride','repair']);

// 创建工厂
var BicyleFactory = {
    createBicyle : function(mode){
    	var bicycle = null;
        switch(mode){
            case 'yonghe' :
                bicycle = new Yonghe();
                break;
            case 'aima' :
                bicycle = new Aima();
                break;
            case 'aoda':
                bicycle = new Aoda();
                break;
            default :
                throw new Error("mode not found");
        }
        Interface.ensureImplements(bicycle,Bicycle);// 检查实现.
        return bicycle;
    }
};
// 定义商店,提供各种Bicyle
var BicycleShop = function(){};
BicycleShop.prototype ={
    sellBicycle : function(mode){
         var bicycle = BicycleFactory.createBicycle(mode);
         bicycle.assemble();
         bicycle.wash();
         return bicycle;
    }
}

// YongheBicyle
var Yonghe = function(){
    
};
// 实现接口
Yonghe.prototype={
    assemble : function(){
        alert('清洗');
    },
    wash : function(){
        alert('组装');
    },
    ride : function(){
    
    },
    repair : function(){
    
    }
};

// var Aima = function(){
//    
// };
// var Aoda = function(){
//
// };
var bicycleShop = new BicycleShop();
bicycleShop.sellBicycle('giant');
分享到:
评论

相关推荐

    JavaScript面向对象实现简单工厂模式

    在`JavaScript简单工厂模式.mht`文件中,可能包含了对这个实现的详细分析,包括代码的解释、运行示例以及可能的优化和改进方案。通过阅读这份文件,可以更深入地理解如何在JavaScript中应用面向对象和简单工厂模式来...

    js简单工厂模式用法实例

    在JavaScript这种基于原型继承的动态语言中,简单工厂模式同样有着广泛的应用。简单工厂模式的核心思想是将对象的创建与对象的使用分离,工厂类根据传入的参数决定创建出哪一个类的实例。 从提供的文件内容中,我们...

    简单工厂模式三层架构

    简单工厂模式三层架构是一种常见的软件设计模式,它将应用程序分为三个主要层次:表现层(WebUI)、业务逻辑层(BLL)和数据访问层(DAL),以实现代码的解耦和模块化。在这个架构中,工厂模式用于创建对象,使得在...

    JS工厂模式

    简单工厂模式通常是一个中心工厂类负责创建所有实例,而在真正的工厂模式中,对象的创建被延迟到子类中进行。这种设计允许更多的灵活性,可以根据不同的条件或者策略创建不同类型的对象,而无需修改原有代码,符合开...

    Cocos2d-x实现潜艇大战——简单工厂模式,对象池

    本项目"潜艇大战"是基于Cocos2d-x的一个实例,旨在利用"简单工厂模式"和"对象池"这两种设计模式来优化资源管理和对象创建,提高游戏性能。 ### 简单工厂模式 简单工厂模式是一种创建型设计模式,它提供了一个创建...

    JavaScript设计模式–简单工厂模式定义与应用案例详解

    本文实例讲述了JavaScript设计模式–简单工厂模式定义与应用。分享给大家供大家参考,具体如下: 一,介绍 工厂模式创建对象(视为工厂里的产品)时无需指定创建对象的具体类。 工厂模式定义一个用于创建对象的接口...

    js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式).docx

    - **工厂模式** 更适合简单的对象创建,尤其是当对象结构相对简单时。 - **构造函数模式** 提供了一种更加规范化的对象创建方式,适用于需要多次创建相同类型的对象的场景。 - **原型模式** 最适合需要共享方法和...

    JavaScript中的工厂模式:构建灵活的对象创建机制

    工厂模式是一种简单而强大的设计模式,它提供了一种灵活的对象创建机制,有助于解耦对象的创建和使用。在JavaScript中实现工厂模式,可以有效地提高代码的模块化和可维护性。通过本文的介绍,你应该能够理解工厂模式...

    javascript设计模式 – 简单工厂模式原理与应用实例分析

    本文实例讲述了javascript设计模式 – 简单工厂模式。分享给大家供大家参考,具体如下: 介绍:简单工厂模式是最常用的一类创建型设计模式。其中简单工厂模式并不属于GoF23个经典设计模式,它通常被作为学习其他工厂...

    第九课 工厂模式1

    - **简单工厂模式**:在一个工厂类中,根据传入的参数决定创建哪种类型的实例。在示例代码中,`factoryFn.createObj`方法就是一个简单的工厂,它根据传入的`type`值,返回`Fn1`、`Fn2`或`Fn3`的实例。 ```...

    设计模式的工厂模式,单例模式

    1. **简单工厂模式**:一个中心类负责创建所有相关类的实例。 2. **工厂方法模式**:定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法让类的实例化推迟到子类。 3. **抽象工厂模式**:提供一个创建一...

    JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】

    在JavaScript中,我们可以利用简单工厂模式来处理类似Ajax请求的场景。例如,在这个XHR工厂案例中,我们首先定义了一个接口类`Interface`,用于规范后续的Ajax处理类需要实现哪些方法。`Interface`类有两个主要方法...

    Javascript面向对象设计一 工厂模式.docx

    以下是一个简单的工厂模式示例: ```javascript function createEmployee(name, age, job) { var Emp = new Object(); Emp.name = name; Emp.age = age; Emp.job = job; Emp.sayName = function() { alert...

    javascript工厂模式和构造函数模式创建对象方法解析.docx

    ### JavaScript工厂模式与构造函数模式创建对象方法解析 #### 一、工厂模式 在JavaScript中,工厂模式是一种常用的设计模式,用于封装创建对象的过程。它通过一个函数来创建具有相似特性的多个对象实例,这些对象...

    js代码-设计模式之工厂模式--简单工厂模式

    本篇文章将聚焦于JavaScript中的一个基础设计模式——简单工厂模式。简单工厂模式是一种创建型设计模式,它提供了一个创建对象的接口,但允许子类决定实例化哪一个类。这种模式主要用于简化对象的创建过程,使得...

    javascript抽象工厂模式详细说明

    抽象工厂模式是一种创建型设计模式,它用于创建一系列相关或相互依赖的对象,而无需指定具体类。在JavaScript中,由于...而在其他情况下,可能需要考虑是否使用其他更简单的工厂模式,或者更直接的构造函数调用方式。

    javascript的oop思想以及单例,工厂,观察者模式简例

    以上就是JavaScript中的面向对象编程思想,以及单例模式、工厂模式和观察者模式的简单实现。理解并熟练运用这些设计模式,能帮助开发者编写出更加高效、可维护的代码。在实际项目中,根据需求灵活组合和应用这些模式...

Global site tag (gtag.js) - Google Analytics