浅析面向对象(工厂模式)

原创 2016年06月01日 19:37:48

以前天天说面向对象,再看了JavaScript高级程序设计这一书,不知是因为水平有限,还是外国人的难以理解,总是难以理解。最近看了一些小视频,再加上结合书的理解,终于算是有了一点小了解!
1.先来一段小代码

var obj = new Object();//也可以写成var obj = {};这里创建了一个空的对象
obj.name = 'Tom';
obj.showname = function(){
  alert(obj.name);//也可写成alert(this.name);
};
obj.showname();//showname前面是obj,则该函数里面的this指向obj,若函数前面没有任何东西,则指向window

看这段代码,属性与方法都是写在obj这个对象下的,很容易看出这个方法的问题。就是如果我创建另外一个对象,有同样的方法和属性则只能再创建一次,如下代码:

var obj = new Object();
obj.name = 'Tom';
obj.showname = function(){
  alert(obj.name);
};
var obj2 = new Object();
obj2.name = 'Tom';
obj2.showname = function(){
  alert(obj2.name);
};
obj.showname();
obj2.showname();

这样写代码重复率过高,非常麻烦!接下来就要引出工厂模式
2.工厂模式
这个名字听上去很洋气~其实简单点说就是函数的封装!为什么说它是工厂模式,是因为它很形象~
再来一段代码:

function createPerson(name){//把函数内部想象成一个生成手机的工厂
    var obj = new Object();//手机原料
    obj.name = name;//设置手机的型号
    obj.showname = function(){//设置手机的功能
       alert(this.name);
    };
    return obj;//生产好的手机,发出厂子!
}
var p1 = createPerson('Tom');
p1.showname();
var p2 = createPerson('Jim');
p2.showname();

以上就是一个工厂模式,这和第一个比省了很多代码!只要调用一下函数就可以创建一个对象。
3.进阶版工厂模式
我们把自己写的这个和系统对象进行一个对比!
(系统对象:var arr1 = new Array();var date = new Date()这些类似的就是系统默认写好的对象,直接可以用)
比较一下,自己写的这个没有new,后面的函数名首字母不是大写的。我们来改一改,使得它和系统对象一致。
1)改首字母,这个简单直接改一下函数名就行了。
2)加上new
将CreatePerson函数内部的new创建移入外部,创建对象的地方;
var p1 = new CreatePerson(‘Tom’);
这里说明两点:①new后面的函数就变成构造函数le
②new后面的函数内部有this,则this指向创建对象的本身(this和p1就是一个东西了),而且函数会有一个返回值为this(隐式返回,就是自己会返回了,不用我们写)
综上,简化代码:

function CreatePerson(name){
    this.name = name;
    this.showname = function(){
       alert(this.name);
    };
}
var p1 = new CreatePerson('Tom');
p1.showname();

这样子代码又被华丽丽的简化了~~~

面向对象编程设计模式--简单工厂模式讲解(历史上最简单明白的例子)

工作之余,在看资料过程中发现一个极易理解的简单工厂模式的例子,自己亲自试练一番,感觉对这个设计模式不熟悉的朋友, 一看马上就知道是什么回事了。 简单工厂模式根据提供给它的数据,返回几个可能类中...
  • s1102379635
  • s1102379635
  • 2012年09月12日 11:14
  • 1355

设计模式(一) 工厂模式 五种写法总结

转载请标明出处: http://blog.csdn.net/zxt0601/article/details/52703280本文出自:【张旭童的博客】系列开篇瞎BB设计模式相关的文章学习与总结,一...
  • zxt0601
  • zxt0601
  • 2016年10月12日 16:47
  • 9983

设计模式(一)工厂模式Factory(创建型)

设计模式一 工厂模式Factory          在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接...
  • hguisu
  • hguisu
  • 2012年04月25日 21:29
  • 105011

php面向对象开发之——抽象工厂模式

抽象工厂模式是相对于工厂模式而言的,若未看过上一篇工厂模式,请先看上一篇工厂模式:http://blog.csdn.net/phenixsoul/article/details/8486571 抽象...
  • phenixsoul
  • phenixsoul
  • 2013年01月14日 16:51
  • 1682

设计模式(单例、代理、工厂)

第一种(懒汉,线程不安全):   Java代码  收藏代码 public class Singleton {       private static Singleton instance; ...
  • PineApple0
  • PineApple0
  • 2014年11月05日 19:02
  • 2829

为什么工厂模式是华而不实的—浅谈工厂模式的利与弊

转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/17428923说明:博主虚心接受大家的抨击,批评,指正前言我一直想介绍下工厂模...
  • singwhatiwanna
  • singwhatiwanna
  • 2013年12月20日 01:26
  • 13931

JavaScript面向对象实现简单工厂模式

  • 2015年06月18日 16:57
  • 6KB
  • 下载

C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式) (Level 300)

  • 2008年09月13日 15:50
  • 7.78MB
  • 下载

C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式)

  • 2009年08月20日 15:43
  • 6.93MB
  • 下载

黑马程序员_学习笔记2交通灯系统中面向对象思想的理解以及工厂模式的应用

---------------------- android培训、java培训、期待与您交流! ----------------------                   “两个石头磨成一个...
  • fvfgvtvfcfxd
  • fvfgvtvfcfxd
  • 2011年11月10日 22:25
  • 323
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅析面向对象(工厂模式)
举报原因:
原因补充:

(最多只允许输入30个字)