JS设计模式(动态工厂模式)

<!--引入的核心JS文件-->
<script type="text/javascript" src="CommonUtil.js"></script>
<script type=text/javascript charset=utf-8>
<!--JS设计模式(细粒度工厂模式)-->
//搭建一个工厂环境 买什么车——(去什么店)卖车的店——卖车——生产车

//卖车店 super Shop 只有卖车的方法
function CarShop(){};
CarShop.prototype={
constructor:CarShop,
sellCar:function(type){//卖车方法
this.abstractSellCar(type);
},
abstractSellCar:function(){
throw new Error("这是个抽象方法");
}
};
//具体的4s店
function BenzCarShop(){};
JALJA.extend(BenzCarShop,CarShop);
BenzCarShop.prototype={
constructor:BenzCarShop,
sellCar:function(type){
var car;//声明一个变量
var types=["Benz"];//存放所有Benz类型车
for(t in types){
if(types[t]===type){
car=CarFactory.createCar(type);
}else{
alert("没有你要的车");
}
}
return car;
}
};
function BmwCarShop(){};
JALJA.extend(BmwCarShop,CarShop);
BenzCarShop.prototype={
constructor:BmwCarShop,
sellCar:function(type){
var car;//声明一个变量
var types=["Bmw"];//存放所有Benz类型车
for(t in types){
if(types[t]===type){
car=CarFactory.createCar(type);
}else{
alert("没有你要的车");
}
}
return car;
}
};
//生产车的工厂 - 动态工厂函数(eval)
var CarFactory={
createCar:function(type){
//var car =new Benz();
var car=eval("new "+type+" ()");//声明一个变量
//检验接口实现
JALJA.Interface.ensureImplements(car,CarInterface);
return car;
}

};
var CarInterface =new JALJA.Interface("CarInterface",[‘start‘,‘run‘]);
//所有车的父类
function BaseCar(){};
BaseCar.prototype={
constructor:BaseCar,
start:function(){
alert(this.constructor.name + " :start");
},
run:function(){
alert(this.constructor.name +" :run");
}
}
//具体的车
function Benz(){};
//继承 --放在特有属性前面
JALJA.extend(Benz,BaseCar);
//定义自己特有的属性
Benz.prototype.driverBenz=function(){
alert("Benz 特有1");
};
function Bmw(){};
//继承 --放在特有属性前面
JALJA.extend(Bmw,BaseCar);
//定义自己特有的属性
Bmw.prototype.driverBmw=function(){
alert("Bmw 特有1");
};
function Audi(){};
//继承 --放在特有属性前面
JALJA.extend(Audi,BaseCar);
//定义自己特有的属性
Audi.prototype.driverAudi=function(){
alert("Audi 特有1");
};
//测试
var shop=new BenzCarShop();
var car=shop.sellCar("Benz");
car.run();
car.start();
car.driverBenz();
</script>

时间: 2024-10-08 10:03:59

JS设计模式(动态工厂模式)的相关文章

JS 设计模式(工厂模式环境搭建)

<!--引入的核心JS文件--> <script type="text/javascript" src="CommonUtil.js"></script> <script type=text/javascript charset=utf-8> <!--JS设计模式(工厂模式)--> //搭建一个工厂环境 //卖车店 function CarShop(){}; CarShop.prototype={ cons

js设计模式:工厂模式、构造函数模式、原型模式、混合模式

一.js面向对象程序 var o1 = new Object(); o1.name = "宾宾"; o1.sex = "男"; o1.age = "27"; o1.msg = function(){ console.log("姓名:"+this.name+"  性别:"+this.sex+"  年龄:"+this.age); } var o2 = new Object(); o2.nam

JS设计模式--简单工厂模式

在JS中创建对象会习惯的使用new关键字和类构造函数(也是可以用对象字面量). 工厂模式就是一种有助于消除两个类依赖性的模式. 工厂模式分为简单工厂模式和复杂工厂模式,这篇主要讲简单工厂模式. 简单工厂模式:使用一个类来生成实例. 复杂工厂模式:使用子类来决定一个成员变量应该是哪个具体的类的实例. 简单工厂模式: 常用对象方法创建和调用 var BallShop = function(){}; BallShop.prototype = { sellBall : function(model){

JS设计模式之工厂模式

简单工厂模式 又叫静态工厂方法:由一个工厂对象决定用那一种类来创建产品,主要用来创建同一类对象,是类的实例化的包装. var PlayBaseketball = function () { this.neededPeople = 15; }; PlayBaseketball.prototype.rule = function () { console.log('运球,传球,投篮,'); }; var playFootball = function () { this.neededPeople =

设计模式之工厂模式:模拟DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC动态创建类对象

该形式的工厂模式是我项目中用到的方法,属于很成熟的模版,读者可以直接拿来在自己项目中使用.个人感觉这种方法真正做到了"开放封闭"的原则,最大好处是用户产品类的设计完全不依赖于该模式的实现,比如提供必须的相关函数等.如果不理解工厂模式的话,请参考网上其它文章,本实现在理解上有一点小小的难度.好东西,大家慢慢享用,话不多说,先放代码! 首先是产品基类,它相当于一个接口,产品需要有什么动作就写在这里吧! #ifndef _CPRODUCTBASE_H_ #define _CPRODUCTBA

设计模式-抽象工厂模式(C#)

设计模式--抽象工厂模式(JAVA) 在抽象工厂模式中,一个具体工厂可以生产一组相关的具体产品,这样的一组产品成为产品族,产品族中的每一个产品都属于某一个产品继承等等级结构.当系统所提供的工厂生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构.属于不同类型的具体产品时就可以使用抽象工厂模式. 抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建,当一个工

浅析JAVA设计模式之工厂模式(一)

1 工厂模式简介 工厂模式的定义:简单地说,用来实例化对象,代替new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式可以动态决定将哪一个类实例化,不用先知道每次要实例化哪一个类. 工厂模式可以分一下三种形态: 简单工厂 (Simple Factory)模式:又称静态工厂模式(StaticFactory). 工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic Factory). 抽象工厂 (Abstract Factroy)模式:又称工具箱模式

设计模式之工厂模式 (二)

工厂模式分为三大类 简单工厂(SimpleFactory) 工厂方法模式(Factory Method) 抽象工厂模式(Abstract Factory) 动态工厂(Dynamic Factory,属于优化版简单工厂) 一.简单工厂 组成如下: (1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑.在java中它往往由一个具体类实现. (2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口.在java中由接口或者抽象类来实现. (3) 具体产品角色:工厂类所创建的对象就是此

php设计模式——抽象工厂模式(Abstract Factory)

二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 1 <?php 2 /* 3 * php设计模式——抽象工厂模式(Abstract Factory) 4 */ 5 6 7 /* 8 * I

Java设计模式之工厂模式(Factory模式)介绍(转载)

原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工厂.Java工厂模式举例等内容,需要的朋友可以参考下 工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经