JS设计模式--简单工厂模式
在JS中创建对象会习惯的使用new关键字和类构造函数(也是可以用对象字面量)。
工厂模式就是一种有助于消除两个类依赖性的模式。
工厂模式分为简单工厂模式和复杂工厂模式,这篇主要讲简单工厂模式。
简单工厂模式:使用一个类来生成实例。
复杂工厂模式:使用子类来决定一个成员变量应该是哪个具体的类的实例。
简单工厂模式:
常用对象方法创建和调用
var BallShop = function(){};
BallShop.prototype = {
sellBall : function(model){
var ball;
switch(model){
case "Tennis":
ball = new TennisBall();
break;
case "bask":
ball = new BaskBall();
break;
case "volly":
ball = new VollyBall();
break;
default:
ball = new FootBall();
break;
}
return ball;
}
}
var JX = new BallShop();
JX.sellBall("tennis");
以上方式能够满足大多数情形下使用,但扩展性就不友好了,如果需要添加一些新的球类,必须修改球类的switch部分。
把这部分单独出来交给一个简单额工厂对象:
var BallFactory = {
createBicycle:function(model){
var ball;
switch(model){
case "Tennis":
ball = new TennisBall();
break;
case "bask":
ball = new BaskBall();
break;
case "volly":
ball = new VollyBall();
break;
default:
ball = new FootBall();
break;
}
return ball;
}
}
BallFactory是一个脱离于BallShop的单体。能够降低耦合度。当需要新添加类型的时候,只要修改BallFactory工厂单体对象就行。
var BallShop = function(){};
BallShop.prototype = {
sellBall:function(model){
var ball = BallFactory.createBall(model);
return ball;
}
}
以上就是一个简单的简单工厂模式。改模式就是将成员对象的创建工作交给一个外部对象实现,该外部对象可以是一个简单的命名空间,也可以是一个类的实例。
JS设计模式--简单工厂模式的更多相关文章
- 3. 星际争霸之php设计模式--简单工厂模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- Golang设计模式—简单工厂模式(Simple Factory Pattern)
Golang设计模式--简单工厂模式 背景 假设我们在做一款小型翻译软件,软件可以将德语.英语.日语都翻译成目标中文,并显示在前端. 思路 我们会有三个具体的语言翻译结构体,或许以后还有更多,但现在分 ...
- [JS设计模式]:工厂模式(3)
简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定的情况. 说的通俗点,就像公司茶水间的饮料 ...
- JS设计模式之工厂模式
1 什么是工厂模式? 工厂模式是用来创建对象的一种最常用的设计模式.我们不暴露创建对象的具体逻辑,而是将将逻辑封装在一个函数中,那么这个函数就可以被视为一个工厂.工厂模式根据抽象程度的不同可以分为: ...
- js设计模式:工厂模式、构造函数模式、原型模式、混合模式
一.js面向对象程序 var o1 = new Object(); o1.name = "宾宾"; o1.sex = "男"; o1.a ...
- C++设计模式——简单工厂模式
简单工厂模式(Simple Factory Pattern) 介绍:简单工厂模式不能说是一个设计模式,说它是一种编程习惯可能更恰当些.因为它至少不是Gof23种设计模式之一.但它在实际的编程中经常被用 ...
- 深入浅出设计模式——简单工厂模式(Simple Factory)
介绍简单工厂模式不能说是一个设计模式,说它是一种编程习惯可能更恰当些.因为它至少不是Gof23种设计模式之一.但它在实际的编程中经常被用到,而且思想也非常简单,可以说是工厂方法模式的一个引导,所以我想 ...
- C#设计模式--简单工厂模式
简单工厂模式是属于创建型模式,但不属于23种GOF设计模式之一. 举一个例子:一个公司有不同的部门,客户根据需要打电话到不同的部门.客户相当于上端,不同部门相当于下端.不使用简单工厂模式来实现的例子如 ...
- 设计模式 | 简单工厂模式(static factory method)
按理说应该把书全都看完一遍,再开始写博客比较科学,会有比较全面的认识. 但是既然都决定要按规律更新博客了,只能看完一个设计模式写一篇了. 也算是逼自己思考了,不是看完就过,至少得把代码自己都敲一遍. ...
随机推荐
- Html.RenderPartial与Html.RenderAction
Html.RenderPartial与Html.RenderAction的区别 Html.RenderPartial与Html.RenderAction这两个方法都是用来在界面上嵌入用户控件的 ...
- Chapter 3.GDI/DirectDraw Internal Data Structures
说明,在这里决定跳过第二章,实在是因为里面涉及的内容太理论,对我而言又太艰深 3.1 HANDLES AND OBJECT-ORIRNTED PROGRAMMING In normal object- ...
- CLR via C# 3rd - 04 - Type Fundamentals
1. System.Object The runtime requires every type to ultimately be derived from the System.Obj ...
- VIM-Sed常用的一些记录。。。逐渐学习。。
:[range]co[py] {address} :t :[range]m[ove] {address] 例如 :1,3t10 1-3行复制到10行后.用m就是移动了. :sort / / // ...
- js 获取当前焦点所在的元素、给元素和input控件添加键盘监听事件、添加页面级的键盘监听事件
页面级的键盘监听事件 document.onkeydown = function (event) { var e = event || window.event || arguments.callee ...
- php 斐波那契数列
function fib($n) { $cur = 1; $prev = 0; for ($i = 0; $i < $n; $i++) { yield $cur; $temp = $cur; $ ...
- CSS3+JS切割轮播图
以下说明数据,是指有4张图片的轮播图,分别切割成4张. 首先,做成单张切换的立体效果,即通过旋转,确定四张图片的位置,分别是一个立方体的上下前后的图片翻转移动角度. .box ul li:nth-ch ...
- js 基础面试题
function printArray(arr){ for(var i in arr){ if(arr[i] instance of Array){ printArray(arr[i]); }else ...
- Hot code replace failed
今天在eclipses中 修改代码,保存时会出时不时出现Hot code replace failed 对话框,谷歌提示是在debug模式下保存修改源代码会出现此类问题.确实,刚刚在用debug功能, ...
- JSWindow对象
Window 对象 Window 对象表示浏览器中打开的窗口. 如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外 ...