简单工厂模式:使用一个类来生成实例。

复杂工厂模式:使用子类来决定一个成员变量应该是哪个具体的类的实例。

简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口。通过工厂,可以取得需要的实例。逻辑示意图:

下面列举了一个例子:

var Coffee = function(){
this.color="brown";
};
var Milk = function(){
this.color="white";
};
var OrangeJuice=function(){
this.color="orange";
};
var DrinkShop = function(){
this.sellDrink = function( type){ var drink; switch( type){ case "coffee": drink= new Coffee(); break; case "milk": drink= new Milk(); break; case "orangeJuice": default: drink= new OrangeJuice(); break; }
drink.showColor=function(){
console.log("Drink color:"+drink.color);
};
return drink;
}
}; var drinkShop = new DrinkShop();
drinkShop.sellDrink("milk").showColor();//Drink color:white

可以看出,简单工厂会根据需要生成实例,而这些类一般都包含有某些属性或方法。比如上例中,各种drink都有color属性。这样做的好处就是把需要创建实例的部分抽离,统一管理,对于系统的各部分职能进行划分,降低耦合度。

工厂模式的适用场景:

1.对象的构建相对复杂

2.需要依赖具体环境创建不同实例

3.处理很多具有相同属性的小对象

javascript设计模式-工厂模式的更多相关文章

  1. javascript 设计模式-----工厂模式

    所谓的工厂模式,顾名思义就是成批量地生产模式.它的核心作用也是和现实中的工厂一样利用重复的代码最大化地产生效益.在javascript中,它常常用来生产许许多多相同的实例对象,在代码上做到最大的利用. ...

  2. JavaScript设计模式——工厂模式

    工厂模式:是一种实现“工厂”概念的面上对象设计模式.实质是定义一个创建对象的接口,但是让实现这个接口的类来决定实例化哪个类.工厂方法让类的实例化推迟到子类中进行.创建一个对象常常需要复杂的过程,所以不 ...

  3. 读书笔记之 - javascript 设计模式 - 工厂模式

    一个类或者对象中,往往会包含别的对象.在创建这种对象的时候,你可能习惯于使用常规方式,即用 new 关键字和类构造函数. 这会导致相关的俩个类之间产生依赖. 工厂模式,就是消除这俩个类之间的依赖性的一 ...

  4. JavaScript设计模式—工厂模式

    工厂模式介绍 将new操作符单独进行封装,遇到new时,就要考虑是否该使用工厂模式 举一个生活当中的示例: 你要去购买汉堡,直接点餐,取餐,不会自己动手做,商店要“封装” 做汉堡的工作,做好直接给购买 ...

  5. javascript设计模式-工厂模式(简单工厂)

    接口在工厂模式中起着很重要的作用,如果不对对象进行某种类型检查的以确保其实现了必要的方法,工厂模式的好处也就所剩无几了,举个简单的例子. Interface.js // Constructor. va ...

  6. .NET设计模式: 工厂模式

    .NET设计模式: 工厂模式(转) 转自:http://www.cnblogs.com/bit-sand/archive/2008/01/25/1053207.html   .NET设计模式(1): ...

  7. 【设计模式】Java设计模式 -工厂模式

    [设计模式]Java设计模式 -工厂模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目 ...

  8. javascript设计模式-工厂方法模式

    工厂方法模式笔记  通过对产品类的抽象使其创建业务主要负责用于创建多类产品的实例  对于创建多类对象,简单工厂不太实用,这是简单工厂模式的应用局限,当然这正是工厂方法模式的价值之所在  通过工厂方法模 ...

  9. JavaScript设计模式 - 代理模式

    代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问 代理模式的用处(个人理解):为了保障当前对象的单一职责(相对独立性),而需要创建另一个对象来处理调用当前对象之前的一些逻辑以提高代码的效 ...

随机推荐

  1. 黄聪:PHP 免费获取手机号码归属地(转)

    一.淘宝网API API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443 参数: tel:手机号码 返回 ...

  2. CharsetUtils.java

    /* * Copyright (c) 2013. * * Licensed under the Apache License, Version 2.0 (the "License" ...

  3. PLSQL_性能优化系列01_Oracle Index索引

    2014-06-01 Created By BaoXinjian

  4. ylbtech-Unitity-CS:AnonymousDelegates

    ylbtech-Unitity-CS:AnonymousDelegates 1.A,效果图返回顶部   1.B,源代码返回顶部 1.B.1, using System; using System.Co ...

  5. 在win7电脑中如何查看运行进程的PID标识符

    在介绍技巧方法之前,咱们还是先来介绍一下什么是PID标识符,这个PID标识符就是系统对运行中的程序自动分配的一个编号,是用来识别对应进程的,而且这个编号也是一一对应,不会有重复的,只有当系统结束运行的 ...

  6. Linux中记录终端(Terminal)输出到文本文件(转载)

    一,如何把命令运行的结果保存到文件当中? 这个问题太简单了,大家都知道,用 > 把输出转向就可以了 例子: [lhd@hongdi ~]$ ls > ls.txt [lhd@hongdi ...

  7. MYSQL中replace into的用法以及与inset into的区别

    在向表中插入数据时,我们经常会遇到这样的情况:1.首先判断数据是否存在:2.如果不存在,则插入:3.如果存在,则更新. 在SQL Server中可以这样处理: if not exists (selec ...

  8. 怎么在logcat中显示system.com.print中的打印信息

    在logcat中显示信息可以用Log.v() Log.d() Log.i() Log.w() 以及 Log.e() 1.Log.v 的调试颜色为黑色的,任何消息都会输出: 2.Log.d的输出颜色是蓝 ...

  9. DELPHI SOKET 编程(使用TServerSocket和TClientSocket) 转

    http://www.cnblogs.com/findumars/p/5272658.html   本文采用delphi7+TServerSocket+TClientSocket; 笔者在工作中遇到对 ...

  10. gomoblie flappy 源码分析:游戏逻辑

    本文主要讨论游戏规则逻辑,具体绘制技术请参看相关文章: gomoblie flappy 源码分析:图片素材和大小的处理 http://www.cnblogs.com/ghj1976/p/5222289 ...