javascript工厂模式、单例模式

//工厂模式
function createObject(name,age){
    var obj = new Object();
    obj.name = name;
    obj.age = age;
    obj.fun = function(){
        return this.name + this.age +"一个方法";
    }
    return obj;
}
var box1 = createObject("box1",1);
var box2 = createObject("box2",2);
alert(box1.fun());
alert(box2.fun());
//这里的box1和box2都是Object,无法无别类型与构造函数方式写一个类的区别在于没有使用this,而是每次都构造一个空对象,然后给其添加属性。创建对象方式不是使用new,而是使用函数调用方式。这种方式基本上用来替代一个类(具有相同属性的对象),而复杂一些的工厂则可以造不同类型的对象。
//构造函数
function Box(name,age){
 this.name = name;
 this.age = age;
 this.fun= function(){
  return this.name + this.age +"一个方法";
 }
}

function Red(name,age){
 this.name = name;
 this.age = age;
 this.fun= function(){
  return this.name + this.age +"一个方法";
 }
}
 var box1 = new Box("box1",1);
 var box2 = new Red("red",2);
//这里的box1和box不是一个对象,box1是Box对象,而box2是Red对象

优:主要好处就是可以消除对象间的耦合,通过使用工程方法而不是new关键字。将所有实例化的代码集中在一个位子防止代码重复。

缺:大多数类最好使用new关键字和构造函数,可以让代码更加简单易读。而不必去查看工厂方法来知道。

//单例模式
var mask;
var createMask = function(){
   if ( mask ) return mask;
   else{
      mask = document,body.appendChild(  document.createElement(div)  );
      return mask;
   }
}
//的确完成了一个产生单列对象的函数。这个函数是存在一定副作用的, 函数体内改变了外界变量mask的引用, 在多人协作的项目中, createMask是个不安全的函数. 另一方面, mask这个全局变量并不是非需不可. 再来改进一下.
var createMask = function(){
  var mask;
  return function(){
      return mask || ( mask = document.body.appendChild( document.createElement(‘div‘) ) )
  }
}()
//用了个简单的闭包把变量mask包起来, 至少对于createMask函数来讲, 它是封闭的.
时间: 2024-10-10 21:46:01

javascript工厂模式、单例模式的相关文章

javascript工厂模式

工厂模式 设计工厂模式的目的是为了创建对象.它通常在类或者类的静态方法实现,具有下列目标: 1.在创建相似对象是执行重复操作 2.在编译时不知道具体类型(类)的情况下,为工厂客户提供一种创建对象的接口. 通过工厂方法(或类)创建的对象在设计上都继承了相同的父对象这个思想,它们都是实现专门功能的特定子类.有时候公共父类是一个包含了工厂方法的同一个类. 代码: //父构造函数 function CarMaker(){}; CarMaker.prototype.drive = function(){

策略模式+简单工厂模式+单例模式:简单推送服务

一.功能: 实现  获取数据  —>根据用户订阅清单进行推送 —> 这里的推送方式:QQ.Email.App.插件等等 用户可多选推送方式. 二.实现 1.推送方式—枚举(位运算): [Flags] public enum PushType { QQ = 0, Email = 2 } 2.策略模式:抽象推送策略 public interface IPush { bool Push(object data); } 3.QQ推送+Email推送 QQ推送:单例模式—静态创建QQ推送服务,线程安全.

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

一.工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程(本书后面还将讨论其他设计模式及其在JavaScript 中的实现).考虑到在ECMAScript 中无法创建类,开发人员就发明了一种函数,用函数来封装以特定接口创建对象的细节,如下面的例子所示. function createPerson(name, age, job){ var o = new Object(); o.name = name; o.age = age; o.job = job; o.s

(一)Python入门-6面向对象编程:12设计模式之工厂模式-单例模式

一:工厂模式实现 设计模式是面向对象语言特有的内容,是我们在面临某一类问题时候固定的做法,设计 模式有很多种,比较流行的是:GOF(Goup Of Four)23 种设计模式. 工厂模式实现了创建者和调用者的分离,使用专门的工厂类将选择实现类.创建对象进 行统一的管理和控制. [操作] #工厂模式实现 class CarFactory: def creatCar(self,brand): if brand == '奔驰': return Benz() elif brand == '宝马': re

javascript 工厂模式

声明一个js对象, var box1=new Object();box2.name1='123';box2.age=100;box2.run=function(){ return this.box2.name1; } //再次声明一个对象 var box2=new Object();box.name1='Lee';box.age=100;box.run=function(){return this.name;+'运行中'; } //为了解决多个类似声明的问题我们可以用一种叫做工厂模式的方法,//

javascript——工厂模式创建对象

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <meta http-equiv="Content-Type"

javascript工厂模式和构造方法

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getS

PHP------单例模式和工厂模式

单例模式和工厂模式 单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的.所有的单例模式至少拥有以下三种公共元素:1. 它们必须拥有一个构造函数,并且必须被标记为private2. 它们拥有一个保存类的实例的静态成员变量3. 它们拥有一个访问这个实例的公共的静态方法单例类不能再其它类中直接实例化,只能被其自身实例化.它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用. 例子: 1 class Single { 2 private $nam

(四)单例模式与工厂模式

在未读<JavaScript设计模式>这本书前,在我的印象里,单例模式就是每个类只会产生一个实例,非常简单.在细看到这个模式时候,有些疑惑单例模式与工厂模式的区别,虽然看起来像最大区别在于是否多次实例化. 单例(Singleton)模式 单例模式它限制了类的实例化次数只能一次.在实例不存在的情况下,可以通过一个方法创建一个类来实现创建类的新实例:如果实例已经存在,它会简单返回该对象的引用.(这跟我想的一样) 例子: var mySingleton = (function () { // Ins