<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<!-- 引入的核心js公共文件 -->
<script type=text/javascript charset=utf-8 src=../commons/../commons/CommonUtil.js></script>
<script type=text/javascript charset=utf-8>
//既可以当成java的类用,也可以当成c++函数用 function CarShop(){};//卖车类,没有工厂模式
CarShop.prototype = {
constructor : CarShop ,
sellCar:function(type){
var car ; // 声明一个变量
switch(type){
case 'Benz': car = new Benz(); break;
case 'Bmw' : car = new Bmw(); break;
case 'Audi': car = new Audi(); break;
default: 'not buy it ';
} BH.Interface.ensureImplements(car ,CarInterface);//接口检测,当函数用BH.Interface.ensureImplements = function(object){},java的接口检测是虚拟机做的,js接口检测是我们自己写的。
return car ;
}
}; // 接口对象的实例,当类用BH.Interface = function(name,methods){}
var CarInterface = new BH.Interface('CarInterface' ,['start','run']); // SuperClass implements CarInterface
function BaseCar(){};
BaseCar.prototype = {//父类方法都在原型对象中
constructor:BaseCar ,
start:function(){
alert(this.constructor.name + ' ..start');//this是调用方法的子类,java多态(通过父类方法里面的this实现)
},
run:function(){
alert(this.constructor.name + ' ..run');
}
}; function Benz(){};
BH.extend(Benz,BaseCar); //BH.extend=function(sub ,sup){},当函数用
Benz.prototype.driveBenz = function(){alert('Benz..drive')};
//Benz.prototype.run = function(){alert('Benz..run')}; function Bmw(){};
BH.extend(Bmw,BaseCar);
Bmw.prototype.driveBmw = function(){alert('Bmw..drive')};
//Bmw.prototype.run = function(){alert('Bmw..run')}; function Audi(){};
BH.extend(Audi,BaseCar);
Audi.prototype.driveAudi = function(){alert('Audi..drive')};
//Audi.prototype.run = function(){alert('Audi..run')}; var shop = new CarShop();
var car = shop.sellCar('Benz');
car.start();
car.run();
car.driveBenz(); var car2 = shop.sellCar('Bmw');
car2.start();
car2.run();
car2.driveBmw();
</script>
</head>
<body>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<!-- 引入的核心js公共文件 -->
<script type=text/javascript charset=utf-8 src=../commons/../commons/CommonUtil.js></script>
<script type=text/javascript charset=utf-8>
// 万事万物都是Object : 卖车的商店 -> 卖车 -> 生产车 -> Factory function CarShop(){};// 商店
CarShop.prototype = {
constructor : CarShop ,
sellCar:function(type){
/* 面向对象 */
// 销售人员...
var car = CarFactory.createCar(type);//工厂
// 保险、相关的售后服务
return car ;
}
}; //工厂,单体模式
var CarFactory = {
createCar:function(type){
var car ; // 声明一个变量
switch(type){
case 'Benz': car = new Benz(); break;
case 'Bmw' : car = new Bmw(); break;
case 'Audi': car = new Audi(); break;
default: 'not buy it ';
}
//检验接口 交给工厂
BH.Interface.ensureImplements(car ,CarInterface);
return car ;
}
}; // 接口对象的实例
var CarInterface = new BH.Interface('CarInterface' ,['start','run']); // SuperClass implements CarInterface
function BaseCar(){};
BaseCar.prototype = {
constructor:BaseCar ,
start:function(){
alert(this.constructor.name + ' ..start');
},
run:function(){
alert(this.constructor.name + ' ..run');
}
}; // Class benz bmw audi (都是车)
// 注意关键问题:子类先继承父类 子类在扩展子类自己特有的方法 function Benz(){};
BH.extend(Benz,BaseCar);
Benz.prototype.driveBenz = function(){alert('Benz..drive')};
//Benz.prototype.run = function(){alert('Benz..run')}; function Bmw(){};
BH.extend(Bmw,BaseCar);
Bmw.prototype.driveBmw = function(){alert('Bmw..drive')};
//Bmw.prototype.run = function(){alert('Bmw..run')}; function Audi(){};
BH.extend(Audi,BaseCar);
Audi.prototype.driveAudi = function(){alert('Audi..drive')};
//Audi.prototype.run = function(){alert('Audi..run')}; var shop = new CarShop();
var car = shop.sellCar('Benz');
car.start();
car.run();
car.driveBenz(); var car2 = shop.sellCar('Bmw');
car2.start();
car2.run();
car2.driveBmw();
</script>
</head>
<body>
</body>
</html>

js23---工厂模式1的更多相关文章

  1. 23种设计模式--工厂模式-Factory Pattern

    一.工厂模式的介绍       工厂模式让我们相到的就是工厂,那么生活中的工厂是生产产品的,在代码中的工厂是生产实例的,在直白一点就是生产实例的类,代码中我们常用new关键字,那么这个new出来的实例 ...

  2. javascript工厂模式和构造函数模式创建对象

    一.工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程(本书后面还将讨论其他设计模式及其在JavaScript 中的实现).考虑到在ECMAScript 中无法创 ...

  3. PHP设计模式(三)抽象工厂模式(Abstract Factory For PHP)

    一.什么是抽象工厂模式 抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足以下条件: 系统中有多个产品族,而系统一次只可能消费其中一族产品. 同 ...

  4. PHP设计模式(一)简单工厂模式 (Simple Factory For PHP)

    最近天气变化无常,身为程序猿的寡人!~终究难耐天气的挑战,病倒了,果然,程序猿还需多保养自己的身体,有句话这么说:一生只有两件事能报复你:不够努力的辜负和过度消耗身体的后患.话不多说,开始吧. 一.什 ...

  5. 设计模式之工厂模式VS抽象工厂

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...

  6. 菜鸟理解的工厂模式(Factory Pattern)是什么样子的?

    直接开始说了,不浪费园友宝贵的时间! 什么是工厂模式? 在学习前,先问一下:"它是什么?". 工厂模式,它是项目里面常用的设计模式之一. 它是属于创建型模式,简单的理解创建型模式就 ...

  7. PHP 面向对象编程和设计模式 (3/5) - 单例模式和工厂模式

    PHP高级程序设计 学习笔记 2014.06.11 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容 ...

  8. 《JS设计模式笔记》构造函数和工厂模式创建对象

    工厂模式 function createPerson (name,age,job) { var o=new Object(); o.name=name; o.age=age; o.job=job; o ...

  9. 从接口、抽象类到工厂模式再到JVM来总结一些问题

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 涉及到的知识点总结如下: 为什么使用接口? 接口和抽象类的区别 简单工厂模式总结 Java中new和newInstance的区别 J ...

  10. C#设计模式之简单工厂模式(Simple Factory)

    1. 概述 简单工厂模式就是将一个类的实例化交给一个静态工厂来执行. 2. 使用频率 中 3. 模式结构 3.1 机构图 3.2 模式中的角色 Product:抽象类,把具体产品类公共的代码进行抽象和 ...

随机推荐

  1. scala细节

    在高版本中,scala使用了自己的String,而不是java.lang.String 字符串转数字:"33.4".toDouble    "33.4".toF ...

  2. ORA-12514: TNS: 监听程序当前无法识别连接描写叙述符中请求的服务

    不指定数据库能够正常连接: 指定数据库和使用PL/SQL Developer都出现错误: 在此说明一下我的环境:Oralce装的是64位的在使用PL/SQL Developer时曾出现过初始化错误,解 ...

  3. Android插件实例——360 DroidPlugin具体解释

    在中国找到钱不难,但你的一个点子不意味着是一个创业.你谈一个再好的想法,比方我今天谈一个创意说,新浪为什么不收购GOOGLE呢?这个创意非常好.新浪一收购GOOGLE.是不是新浪就变成老大了?你从哪儿 ...

  4. CKEditor高级编辑器

    是否感觉后台分类描写叙述信息.商品描写叙述信息以及文章描写叙述信息 编写时很的不方便?有时候会将word的格式也复制过来了?那这个插件就比較适合了. 本插件使用CKEditor最新版本号,复制过来的内 ...

  5. 大型网站架构之JAVA中间件

    中间件就是在大型网站中,帮助各子模块间实现互相访问,消息共享或统一访问等功能的软件产品.常见的有: 远程服务框架中间件:主要解决各子模块之间互相访问的问题. 消息队列中间件:主要解决各子模之间消息共享 ...

  6. ddr sdram self-refresh & auto-refresh

    以下是EDD5116AFTA数据手册的摘录.不过看过了还是不太明白二者的区别. self-refresh:Self-refresh entry [SELF]This command starts se ...

  7. pip报错

    You are using pip version 9.0.1, however version 10.0.1 is available.You should consider upgrading v ...

  8. Alternating Sum

    http://codeforces.com/problemset/problem/963/A 不考虑正负的话,每两项之间之间公比为b/a,考虑正负,则把k段作为循环节,循环节育循环节之间公比为(b/a ...

  9. 使用iVMS-4200 存储录像数据时的设置

    1.安装软件时,选择:存储服务器 2.对存储服务器进行配置,具体配置见 配置手册.

  10. Copying GC (Part two :Multi Space Copying GC)

    目录 近似深度优先搜索方法 Cheney的GC复制算法 前提 执行结果 多空间复制算法 multi_space_copying()函数 mark_or_copy() copy() 执行过程 优缺点 近 ...