/**
* 简单工厂
*/
// 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简单工厂模式.mht`文件中,可能包含了对这个实现的详细分析,包括代码的解释、运行示例以及可能的优化和改进方案。通过阅读这份文件,可以更深入地理解如何在JavaScript中应用面向对象和简单工厂模式来...
在JavaScript这种基于原型继承的动态语言中,简单工厂模式同样有着广泛的应用。简单工厂模式的核心思想是将对象的创建与对象的使用分离,工厂类根据传入的参数决定创建出哪一个类的实例。 从提供的文件内容中,我们...
简单工厂模式三层架构是一种常见的软件设计模式,它将应用程序分为三个主要层次:表现层(WebUI)、业务逻辑层(BLL)和数据访问层(DAL),以实现代码的解耦和模块化。在这个架构中,工厂模式用于创建对象,使得在...
简单工厂模式通常是一个中心工厂类负责创建所有实例,而在真正的工厂模式中,对象的创建被延迟到子类中进行。这种设计允许更多的灵活性,可以根据不同的条件或者策略创建不同类型的对象,而无需修改原有代码,符合开...
本项目"潜艇大战"是基于Cocos2d-x的一个实例,旨在利用"简单工厂模式"和"对象池"这两种设计模式来优化资源管理和对象创建,提高游戏性能。 ### 简单工厂模式 简单工厂模式是一种创建型设计模式,它提供了一个创建...
本文实例讲述了JavaScript设计模式–简单工厂模式定义与应用。分享给大家供大家参考,具体如下: 一,介绍 工厂模式创建对象(视为工厂里的产品)时无需指定创建对象的具体类。 工厂模式定义一个用于创建对象的接口...
- **工厂模式** 更适合简单的对象创建,尤其是当对象结构相对简单时。 - **构造函数模式** 提供了一种更加规范化的对象创建方式,适用于需要多次创建相同类型的对象的场景。 - **原型模式** 最适合需要共享方法和...
工厂模式是一种简单而强大的设计模式,它提供了一种灵活的对象创建机制,有助于解耦对象的创建和使用。在JavaScript中实现工厂模式,可以有效地提高代码的模块化和可维护性。通过本文的介绍,你应该能够理解工厂模式...
本文实例讲述了javascript设计模式 – 简单工厂模式。分享给大家供大家参考,具体如下: 介绍:简单工厂模式是最常用的一类创建型设计模式。其中简单工厂模式并不属于GoF23个经典设计模式,它通常被作为学习其他工厂...
- **简单工厂模式**:在一个工厂类中,根据传入的参数决定创建哪种类型的实例。在示例代码中,`factoryFn.createObj`方法就是一个简单的工厂,它根据传入的`type`值,返回`Fn1`、`Fn2`或`Fn3`的实例。 ```...
1. **简单工厂模式**:一个中心类负责创建所有相关类的实例。 2. **工厂方法模式**:定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法让类的实例化推迟到子类。 3. **抽象工厂模式**:提供一个创建一...
在JavaScript中,我们可以利用简单工厂模式来处理类似Ajax请求的场景。例如,在这个XHR工厂案例中,我们首先定义了一个接口类`Interface`,用于规范后续的Ajax处理类需要实现哪些方法。`Interface`类有两个主要方法...
以下是一个简单的工厂模式示例: ```javascript function createEmployee(name, age, job) { var Emp = new Object(); Emp.name = name; Emp.age = age; Emp.job = job; Emp.sayName = function() { alert...
### JavaScript工厂模式与构造函数模式创建对象方法解析 #### 一、工厂模式 在JavaScript中,工厂模式是一种常用的设计模式,用于封装创建对象的过程。它通过一个函数来创建具有相似特性的多个对象实例,这些对象...
本篇文章将聚焦于JavaScript中的一个基础设计模式——简单工厂模式。简单工厂模式是一种创建型设计模式,它提供了一个创建对象的接口,但允许子类决定实例化哪一个类。这种模式主要用于简化对象的创建过程,使得...
抽象工厂模式是一种创建型设计模式,它用于创建一系列相关或相互依赖的对象,而无需指定具体类。在JavaScript中,由于...而在其他情况下,可能需要考虑是否使用其他更简单的工厂模式,或者更直接的构造函数调用方式。
以上就是JavaScript中的面向对象编程思想,以及单例模式、工厂模式和观察者模式的简单实现。理解并熟练运用这些设计模式,能帮助开发者编写出更加高效、可维护的代码。在实际项目中,根据需求灵活组合和应用这些模式...