javascript模式——Factory
Facotry模式是一种创建型模式,他不同于一般编码习惯,显示的调用各个构造函数。Factory模式是提供一个通用的接口来创建对象。
一个Factory模式压缩所有对象创建的方式,降低这个工厂与其它对象的耦合。
用一段代码来演示,我们用Factory模式做一家汽车工厂程序。
// 工厂类
var Factory = {
createVehicle:function(type){
var carFactory;
switch(type){
case 'car':
carFactory = Object.create(this.Car);
break;
case 'car':
carFactory = Object.create(this.Truck);
break;
}
return carFactory;
}, // 汽车类
Car: {
doors: 4,
}, // 卡车类
Truck: {
doors: 6,
color: 'blue',
} // 其它工厂类代码
} // 实例化一个工厂
var factory = Object.create(Factory); // 通过工厂的入口实例化汽车
var car = factory.createVehicle('car');
由代码可以看出,我们不是用Object.create(Factory.Car)或Object.create(Factory.Truck)显示创建相应实例,而是用一个createVehicle函数来管理,根据不同的参数调用不同的汽车类创建不同的实例。用这种方式,后面的程序创建汽车实例将只依赖factory.createVehicle这个入口函数,大大降低了耦合。
由于IE8并不支持Object.create,我们可以用MDN提供的polyfill进行兼容处理。
// Polyfill
if (!Object.create) {
Object.create = function (o) {
if (arguments.length > 1) {
throw new Error('Object.create implementation only accepts the first parameter.');
}
function F() {}
F.prototype = o;
return new F();
};
}
工厂方法一般是使用一个入口函数,运用switch语句进行不同产品实例的创建,所以,我们在创建实例的时候不用去考虑工厂里是如何实现的。
而抽象工厂是在已经有若干个工厂的前提下,抽象出一个统一的接口,它把这些工厂生产的东西当做同一类。抽象工厂更像是一种策略。
http://robdodson.me/javascript-design-patterns-factory/
javascript模式——Factory的更多相关文章
- 《JavaScript 模式》知识点小抄本(上)
介绍 最近开始给自己每周订个学习任务,学习结果反馈为一篇文章的输出,做好学习记录. 这一周(02.25-03.03)我定的目标是<JavaScript 模式>的第七章学习一遍,学习结果的反 ...
- javascript 模式(1)——代码复用
程序的开发离不开代码的复用,通过代码复用可以减少开发和维护成本,在谈及代码复用的时候,会首先想到继承性,但继承并不是解决代码复用的唯一方式,还有其他的复用模式比如对象组合.本节将会讲解多种继承模式以实 ...
- 六个创建模式之工厂方法模式(Factory Method Pattern)
问题: 在使用简单工厂模式的时候,如果添加新的产品类,则必需修改工厂类,违反了开闭原则. 定义: 定义一个用于创建对象的接口,让子类决定具体实例化哪个产品类.此时工厂和产品都具有相同的继承结构,抽象产 ...
- 【读书笔记】读《JavaScript模式》 - 函数复用模式之现代继承模式
现代继承模式可表述为:其他任何不需要以类的方式考虑得模式. 现代继承方式#1 —— 原型继承之无类继承模式 function object(o) { function F() {}; F.protot ...
- 【读书笔记】读《JavaScript模式》 - 函数复用模式之类式继承模式
实现类式继承的目标是通过构造函数Child()获取来自于另外一个构造函数Parent()的属性,从而创建对象. 1.类式继承模式#1 —— 默认方式(原型指向父函数实例) function Paren ...
- 初涉JavaScript模式系列 阶段总结及规划
总结 不知不觉写初涉JavaScript模式系列已经半个月了,没想到把一个个小点进行放大,竟然可以发现这么多东西. 期间生怕对JS的理解不到位而误导各位,读了很多书(个人感觉JS是最难的oo语言),也 ...
- 设计模式(二)工厂模式Factory (创建型)
工厂模式分为三种:简单工厂模式 (Simple Factory) .工厂方法模式(Factory Method).抽象工厂模式(Abstract Factory) //举例:发送邮件和短信的例子 /* ...
- 设计模式(一)工厂模式Factory(创建型)
设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.可是在一些情况下, new操作符直接生成对象会带来一些问题. ...
- 设计模式(一)工厂模式Factory(创建类型)
设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.可是在一些情况下, new操作符直接生成对象会带来一些问题. ...
随机推荐
- telnet如何操作Memcached缓存系统?
4.(1)telnet操作Memcached 许多语言都实现了连接memcached的客户端,其中以Perl.PHP为主.仅仅memcached网站上列出的语言就有:• Perl • PHP • Py ...
- hdu 3954 Level up(线段树)
题目链接:hdu 3954 Level up 题目大意:N个英雄,M个等级,初始等级为1,给定每一个等级须要的经验值,Q次操作,操作分两种,W l r x:表示l~r之间的英雄每一个人杀了x个怪物:Q ...
- AudioManager详解(结合源代码)
AudioManager:用来对音量大小,声音模式(静音,震动,震动加声音等模式)的管理, 还有用它来注册“插入耳机”时的广播接收者(Action: android.intent.action.MED ...
- 使用lock_sga和pre_page_sga参数保证SGA常驻物理内存 .
Lock_sga LOCK_SGA locks the entire SGA into physical memory. It is usually advisable to lock the SGA ...
- 创建httpd启动脚本并加入启动列表开机启动
第一步: cp /usr/local/apache2/bin/apachectl /etc/init.d/httpd 第二步: vim /etc/init.d/httpd 在第一行#!/bin/s ...
- Illustrated C#学习笔记(一)
迄今为止最容易看懂的一本C#入门图书,的确是,很不错的一本书,继续读下去,并做好相关笔记吧. Chapter 1 C#和.NET框架 主要讲述了一些.NET框架下的一些不明觉厉的名词如CLR,CLI. ...
- 下拉菜单中的Option对象
1.创建Option对象 1.1 var optionEle1 = document.createElement('option'); 1.2 var optionEle2 = new Option( ...
- github Permission denied (publickey)解决办法
想要玩玩git,参考了网友懒惰之计的一篇Blog<github:如何获取项目源代码 >,按部就班完成了所有的步骤的, 可在测试的时候,遇到了问题,总是报错”github Permissio ...
- 【转】获取CID 和 LAC的方法
原文地址:http://stackoverflow.com/questions/13399659/get-cellid-mcc-mnc-lac-and-network-in-ios-5-1 在iOS5 ...
- ‘Microsoft.Jet.OLEDB.4.0’ provider is not registered
正如以下msdn论坛所述,Microsoft.Jet.OLEDB.4.0只有32bit,所以我们必须compile application to x86 platform. http://social ...