js设计模式总结1

js设计模式有很多种,知道不代表会用,更不代表理解,为了更好的理解每个设计模式,对每个设计模式进行总结,以后只要看到总结,就能知道该设计模式的作用,以及模式存在的优缺点,使用范围。

本文主要参考张容铭著的《JavaScript设计模式》。

1、简单工厂模式

由一个工厂对象决定创建某一种产品对象类的实例,主要用来创建同一类对象。

举例子:1、比如不同的弹出框,有警告框,提示框,确认框等。我们创建一个大类包含包含其共有的部分,比如显示,内容等,再根据创建是选择的类型,再将差异部分添加进去。

2、体育店里面有很多商品,及相关介绍,我们要买的时候,只要体育店有,就会得到相关产品和信息。先创建不同产品的基类,然后再用一个大类(也就是所谓的工厂)来包容这些基类。可用switch来选择确定要创建什么。

总结:第一种是通过创建一个新对象然后包装增强其属性和功能实现的。第二种是通过类的实例化实现的。前一种因为共享父类,所以父类的方法方法属性是可以共用的,后者就不行了。简单工厂模式使用场合通常也限制在创建单一对象

2、工厂方法模式

工厂方法模式:通过对产品类的抽象使其创建业务主要负责用于创建多类产品的实例。将实际创对象工作推迟到子类中,这样核心类就成了抽象类。

其中涉及到一个安全模式类:

var demo = function(){
     if(!(this instanceof demo)){
            return new demo();
    }    
}            

通过判断this是不是实例来进行实例化。这样就可以避免漏掉new关键字。

var Factory=function(type,content){
    if(this instanceof Factory){
        var s=new [type](content);
    }else{
         Factory(type,content)
    }
}

Factory.prototype={
    java:(content){
        //......
    },php:......
}

在原型上添加不同类型的方法,然后在调用子类的时候实例化。如果采用简单工厂模式的话,用类实例化方法,但是这样需要修改工厂方法和添加基类,也就是要修改两个地方。而采用上面的方法,只需要在原型上添加方法就可以了。

避免了使用者和对象类之间的耦合,用户不用关心创建该类的具体类,只需要调用工厂方法就可以。

3、抽象工厂模式

抽象类并不是用来创建具体的类,而是用来当做父类来创建一些子类。创建的是一个类簇,它制定了类的结构。其实就是先创建一个大类,然后在细分下,添加小类的实现方法,将小类的方法挂到小类的原型上。

4、建造者模式

将一个复杂对象的构建层与其表示层相互分离,同样的构建过程可采用不同的表示。

工厂模式主要是为了创建对象实例或者类簇(抽象工厂),关心的是最终产出(创建)的是什么。不关心创建的过程,仅仅需要创建的最终结果。所以工厂模式得到的是对象实例或者类簇。而建造者模式再创建对象的时候更为复杂,虽然其目的也是创建对象,但是其更多的是关心创建的整个过程,甚至于创建对象的每一个细节,比如创建一个人,我们不仅要得到人的实例,还要关心穿什么衣服,男的女的,兴趣爱好等等。

举例子:创建一个求职者。我们先创建三个类,Human,Named,Work类。然后在建造者类中调用这三个类的组合,创建一个完整的应聘者对象。

var Person=(name,work){
        var _person= Human();
        _person.name= Named(name);
        _person.work= Work(work);

        return _person;
    }

在建造者模式中将创建的对象类模块化,这样使得每个模块都可以得到灵活的运用与高质量的复用。但是如果对象粒度很小,或者模块间复用率很低且变动不大,我们最好还是创建整体对象。

5、原型模式

用原型实例指向创建者对象的类,使用于创建新的对象的类共享原型对象的属性以及方法。

原型拓展:就是在prototype上进行拓展。

 

6、单例模式

只允许实例化对象一次。,有时我们也用一个对象来规划一个命名空间,井井有条的管理对象上的属性和方法。

var sing=((){
    var instance=null;
     Single(){}
    (){
        if(!instance){
            instance=Single;
        }
         instance;
    }
})();

 

7、外观模式

外观模式:为一组复杂的子系统接口提供一个更高级的统一接口,通过这个接口使得对子系统接口的访问更加容易。在JavaScript中,有时也会用于对底层结构兼容性做统一封装来简化用户使用。
//实现
 addEvent(dom,type,fn){
    if(dom.addEventListener){
        dom.addEventListener(type,fn,1)">false);
    }else (dom.attachEvent){
        dom.attachEvent("on"+type,fn);
    }{
        dom["on"+type]=fn;
    }
}

 

8、适配器模式

适配器模式:将一个类(对象)的接口(方法或者属性)转化为另一个接口,以满足用户的需求,使类之间的接口的不兼容问题通过适配器得以解决。举例子:其实就是为了两个代码库所写的代码兼容运行而书写的额外代码。这样我们就不需要特意地重写以前的功能代码了。参数适配器:比如某个函数要传入很多参数
 dosomething(name,title,age,color,size,prize){};
那么我们要记住这些参数的顺序是很困难的,因此常用的做法是以一个参数对象方式传入的。
 dosomething(obj){};
即使这样,还是存在一个问题,就是我们不知道参数是不是完整的,如果一些参数没有传入,需要使用默认值等等。此时我们通常的做法就是用适配器来适配传入的这个参数对象。
 dosomething(obj){
    var _adapter={
        name:"me",title:"设计",
        age:24版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


什么是设计模式一套被反复使用、多数人知晓的、经过分类编目的、代码 设计经验 的总结;使用设计模式是为了 可重用 代码、让代码 更容易 被他人理解、保证代码 可靠性;设计模式使代码编制  真正工程化;设计模式使软件工程的 基石脉络, 如同大厦的结构一样;并不直接用来完成代码的编写,而是 描述 在各种不同情况下,要怎么解决问题的一种方案;能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免引
单一职责原则定义(Single Responsibility Principle,SRP)一个对象应该只包含 单一的职责,并且该职责被完整地封装在一个类中。Every  Object should have  a single responsibility, and that responsibility should be entirely encapsulated by t
动态代理和CGLib代理分不清吗,看看这篇文章,写的非常好,强烈推荐。原文截图*************************************************************************************************************************原文文本************
适配器模式将一个类的接口转换成客户期望的另一个接口,使得原本接口不兼容的类可以相互合作。
策略模式定义了一系列算法族,并封装在类中,它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,它是针对软件开发中经常遇到的一些设计问题,总结出来的一套通用的解决方案。
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
迭代器模式提供了一种方法,用于遍历集合对象中的元素,而又不暴露其内部的细节。
外观模式又叫门面模式,它提供了一个统一的(高层)接口,用来访问子系统中的一群接口,使得子系统更容易使用。
单例模式(Singleton Design Pattern)保证一个类只能有一个实例,并提供一个全局访问点。
组合模式可以将对象组合成树形结构来表示“整体-部分”的层次结构,使得客户可以用一致的方式处理个别对象和对象组合。
装饰者模式能够更灵活的,动态的给对象添加其它功能,而不需要修改任何现有的底层代码。
观察者模式(Observer Design Pattern)定义了对象之间的一对多依赖,当对象状态改变的时候,所有依赖者都会自动收到通知。
代理模式为对象提供一个代理,来控制对该对象的访问。代理模式在不改变原始类代码的情况下,通过引入代理类来给原始类附加功能。
工厂模式(Factory Design Pattern)可细分为三种,分别是简单工厂,工厂方法和抽象工厂,它们都是为了更好的创建对象。
状态模式允许对象在内部状态改变时,改变它的行为,对象看起来好像改变了它的类。
命令模式将请求封装为对象,能够支持请求的排队执行、记录日志、撤销等功能。
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 基本介绍 **意图:**在不破坏封装性的前提下,捕获一个对象的内部状态,并在该
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为
享元模式(Flyweight Pattern)(轻量级)(共享元素)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结