/**
* 简单工厂
*/
// 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');
分享到:
相关推荐
主要介绍了js简单工厂模式用法,实例分析了javascript工厂模式的实现原理,需要的朋友可以参考下
本文件使用JavaScript已面向对象方式封装类来演示简单工厂模式的实现代码。以实例介绍了简单功能模式的用途,简单分析了实现的要件。mhtl文件里有实例代码的全部内容和分析简述。
真正的工厂模式与简单工厂模式的区别在于,它不是另外使用一个类或对象来创建自行车 而是使用一个子类。按照正式定义,工厂是一个将其成员对象的实例化推迟到子类中进行的类。
本文实例讲述了JavaScript设计模式–简单工厂模式定义与应用。分享给大家供大家参考,具体如下: 一,介绍 工厂模式创建对象(视为工厂里的产品)时无需指定创建对象的具体类。 工厂模式定义一个用于创建对象的接口...
本文实例讲述了javascript设计模式 – 简单工厂模式。分享给大家供大家参考,具体如下: 介绍:简单工厂模式是最常用的一类创建型设计模式。其中简单工厂模式并不属于GoF23个经典设计模式,它通常被作为学习其他工厂...
主要介绍了JavaScript设计模式--简单工厂模式,结合实例形式分析了JavaScript设计模式中简单工厂模式原理与XHR工厂应用案例,需要的朋友可以参考下
阅读目录 基本介绍 举例说明 总结说明 简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都...本文详细介绍了简单工厂模式的理论,并且举例说明了简单工厂模式的具体应用。 基本介绍 简单工厂模式
主要是对javascript的面向对象思想的一个理解,有简单的单例模式,工厂模式,观察者模式含代码。
本文实例讲述了JS 设计模式之:工厂模式定义与实现方法。分享给大家供大家参考,具体如下: 前言 上次我们介绍了单例模式,没看过的小伙伴可以看这个链接: 浅析 JS 设计模式之:单例模式 今天来说一说一种常见的...
主要介绍了JavaScript设计模式--简单工厂模式定义与应用,结合具体案例形式详细分析了JavaScript设计模式中简单工厂模式基本概念、定义、用法与相关注意事项,需要的朋友可以参考下
js代码-设计模式之工厂模式--简单工厂模式
本文实例讲述了Javascript面向对象程序设计工厂模式。分享给大家供大家参考,具体...1.简单工厂模式 简单工厂也就是按照上面的定义,根据不同的参数返回不同的结果。 //定义通用的对象类 var car = function(){};
介绍:前面我们介绍了简单工厂模式,简单工厂模式存在一个严重的问题:当需要扩展时必定要修改工厂类的源代码。我们虽然在第二个demo中做了一些优化,但是我们需在使用时明确指定执行方法的名字,这无疑提高了使用...
优点: 工厂模式弥补了简单工厂模式中违背开放-封闭原则,又保持了封装对象创建过程的优点。 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System....
本文实例讲述了JavaScript设计模式之工厂模式。分享给大家供大家参考,具体如下: 一、工厂模式概念 工厂模式定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类。该模式使一个类的实例化延迟到了子类。...
主要介绍了JavaScript设计模式之工厂方法模式介绍,本文讲解了简单工厂模式、多个工厂方法模式等内容,需要的朋友可以参考下
本文实例讲述了JavaScript设计模式–简单工厂模式。分享给大家供大家参考,具体如下: 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //...