前端设计模式:从js原始模式开始,去理解Js工厂模式和构造函数模式

时间: 2018-01-18阅读: 566标签: 模式

原始模式:  

在js中我们需要创建一个对象,比如创建一个“人”,它拥有自己的名称属性,和可以说话的功能,我们可以这样实现:

var person = new Object;
person.name = "Tony";
person.sayName = function(){
	console.log(this.name);
};
//或者字面量形式
var person={
	name:"tony",
	sayName:function(){
		console.log(this.name);
	}
}

这种设计被称为:原始模式。我们可以看出它具如下优缺点:

优点:可以直观的看出对象拥有的属性和方法
缺点:如果有多个类型,需要创建多个实例


工厂模式  

如果需要批量创建多个人,如person1、person2……的时候,使用原始模式的话每次都要重复类似的代码,如果要是可以批量生产就好了,这个时候使用工厂模式就能很好解决。如下:

var person=function(name){
	var obj=new Object;
	obj.name=name;
	obj.sayName=function(){
		console.log(this.name);
	}
	return obj
}
var p1=person('tony');
var p2=person('aimi');
console.log(typeof p1);  // object
console.log(typeof p2);  // object
console.log(p1 instanceof Object); // true

这样简单的调用就可进入造人模式了(啪啪啪……),只需要指定姓名就可以了。所以工厂模式可以理解像生活中工厂一样,可以批量的生产具有相同属性和功能的商品。开发场景:当我们需要解决很多相似问题,这时候就需要采用工厂模式来实现。

但是工厂模式下的对象我们不能识别它的类型,由于typeof返回的都是object类型,不知道它是那个对象的实例。另外每次造人时都要创建一个独立的person的对象,会造成代码臃肿的情况。所以工厂模式的优缺点总结如下:

优点:同一类型同一属性可以重复调用;能解决多个相似的问题。 
缺点:不能知道对象识别的问题(对象的类型不知道)。


构造函数模式

除了上面讲的工厂模式外,我们还可以使用构造函数模式来解决重复造轮子,产生大量的重复性代码的问题。例如:

var Person=function(name){
	this.name=name;
	this.sayName=function(){
		console.log(this.name);
	}
}
var p1=new Person('tony');
var p2=new Person('aimi');

我们可以看出要使用Person的新实例,就必须使用new。新实例的constructor(构造函数)属性指向的就是Person。

console.log(p1.constructor == Person);//true

同时使用instanceof检测对象的类型就更为可靠了,因为instanceof是用来专门比较一个对象是否为某个构造函数的实例:

console.log(p1 instanceof Object); // true
console.log(p1 instanceof Person); // true

这就是构造函数比工厂模式强的地方,因为它只道自己从哪里来,通过谁产生的。



利用工厂方法对构造函数模式代码的改进: 

当创建对象的流程赋值的时候,比如依赖于很多设置文件等。并且,你会经常在程序里看到工厂方法,用于让子类类定义需要创建的对象类型。  

var Person = (function () {
    var Person = function (name) {
        this.name = name;
        this.sayName=function(){
		console.log(this.name);
	}
    };
    return function (name) {
        return new Person(name);
    };
})();

var p1 = new Person("tony");


 

 

Js职责链模式

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止,职责链模式可以很好的帮助我们管理代码

js设计模式之单例模式

确保只有一个实例提供全局访问,代理的作用是实现一个实例的逻辑;惰性单例顾名思义就是在我们需要的时候在去创建这个单例

JS 上下文模式

也许你会遇到过上面这样的面试题,你只知道它考的是变量提升,但是具体的原理又知道吗?所以我觉得很有必要搞明白底层的原理,才能加深理解,其实围绕的就是执行上下文的概念。

js模板模式

模板模式是抽象父类定义了子类需要重写的相关方法。 而这些方法,仍然是通过父类方法调用的。 根据描述,“模板”的思想体现在:父类定义的接口方法。

实现观察者模式-observer

我们在日常开发使用经常遇到一些场景需要使用到观察者模式,比如登录成功需要改动同步页面多个模块的信息,这时最佳选择是使用observer 观察者模式。

单例设计模式

设计模式:对问题行之有效的解决方式。其实它是一种思想。单例设计模式解决的问题:就是可以保证一个类在内存中的对象唯一性。必须对于多个程序使用同一个配置信息对象时

发布订阅模式与观察者模式

设计模式的定义是:在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。通俗一点说,设计模式是在某种场合下对某个问题的一种解决方案。如果再通俗一点说,设计模式就是给面向对象软件开发中的一些好的设计取个名字。

MVC、MVP 和 MVVM的对比

三个非常重要的架构模式:MVC (Model(模型)-View(视图)-Controller(控制器)),MVP (Model(模型)-View(视图)-Presenter(中介者)),MVVM (Model(模型)-View(视图)-ViewModel(视图模型))

javascript中常见的三种开发模式

所谓单例模式,即保证一个类只有一个实例,并提供一个访问它的全局访问点。所谓观察者模式,即(发布-订阅模式):其定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。

JS单例模式

限制类的实例化次数只能是一次。如果该实例不存在的情况下,可以通过一个方法创建一个类来实现创建类的新实例,如果实例已经存在,它会简单返回该对象的引用。

内容以共享、参考为目的,请勿用于商业用途。其版权归原作者所有,如有侵权,请与小编联系,情况属实将予以删除!

广告赞助文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全