美文网首页
设计模式

设计模式

作者: 小囧兔 | 来源:发表于2017-08-23 22:18 被阅读0次

构造函数模式

 function Person(name,age,sex){
        this.name=name;
        this.age=age;
        this.sex=sex;
    }
    Person.prototype.eat=function(){
        console.log("吃东西");
    }
    var p1=new  Person("小明",18,"男");

混合模式

混合模式就是构造函数模式和原型模式的混合,在混合模式中,构造函数用于定义实例属性,而原型模式用于定义方法和共享的属性。

    function Person(name, age){
        this.name=name;
        this.age=age;
    }

    Person.prototype.getName = function(){
        console.log(this.name)
    };

    Person.prototype.getAge = function(){
        console.log(this.age);
    };
    var p1=new Person("小明",19,"男");
   p1.getAge();//19

模块模式

模块模式能够使一个单独的对象拥有公有/私有方法和变量,从而屏蔽来自全局作用域的特殊部分

var Goods=(function(){
          //声明私有成员
           var price=100;
          function getPrice(){
                 console.log(price);
            }
         // 暴露公开的成员
         return{
             getPrice:getPrice
         }
    })()
    var p=Goods.getPrice();
    console.log(p)//100

工厂模式

工厂模式抽象了具体对象的过程,函数可以接受传来的参数构建一个包含所有必要信息的对象,可以无数次的调用这个函数,每次都返回一个包含属性和方法的对像的引用。

  function createPerson(name,age,sex){
        var person={
            name:name,
            age:age,
            sex:sex,
             sayName:function(){
                 console.log(this.name)
             }
        }
        return person;
    }
    var p1=createPerson("小明",28,"男");

单例模式

单例模式就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象。


1.
var mySingleton = function () {
        /* 这里声明私有变量和方法 */
        var privateV = 'private';
        function showPrivate() {
            console.log(privateV);
        }

        /* 公有变量和方法(可以访问私有变量和方法) */
        return {
            publicMethod: function () {
                showPrivate();
            };
        };
    };

    var single = mySingleton();
    single.publicMethod();  // 输出  private

2.
var Singleton = (function () {
    var instantiated;
    function init() {
        return {
            publicMethod: function () {
                console.log('hello world');
            },
            publicProperty: 'test'
        };
    }
    return {
        getInstance: function () {
            if (!instantiated) {
                instantiated = init();
            }
            return instantiated;
        }
    };
})();

发布订阅模式

在发布订阅者模式中订阅者事件的触发是订阅者通过监听一个特定的消息(这个消息一般包含名称和订阅者所需要的参数)来触发的。可以理解为订阅者监听的不是发布者,而是消息池,只要消息池里有它关心的消息,即触发事件,不管这个消息是谁发布过去的。发布者和订阅者是解耦的。

var PubSub = function(){
      this.eventPool = {}; 
    };
    PubSub.prototype.off = function(topicName){
        delete this.eventPool[topicName]
    };
    PubSub.prototype.on = function(topicName,callback){
        var  topic = this.eventPool[topicName] ; 
        if(!topic){
            this.eventPool[topicName] =[] 
        }
        this.eventPool[topicName].push(callback)
    }
    PubSub.prototype.trigger = function(){
        var _arg = [].slice.call(arguments);
        var topicName=_arg.shift();
        var callbackArg = _arg;
        var topicCallback = this.eventPool[topicName]
        if(topicCallback){
             topicCallback.forEach(function(callback){
                callback.apply(this,callbackArg)
             });
        }
    };

2.使用发布订阅模式写一个事件管理器,可以实现如下方式调用

 var Event = (function(){
        var events = {}

        function on(evt, handler){
            events[evt] = events[evt] || [];
            events[evt].push({
                handler: handler
            })
        }
        function fire(evt, args){
            if(!events[evt]){
                return
            }
            for(var i=0; i<events[evt].length; i++){
                events[evt][i].handler(args)
            }
        }
        function off(evt){
            delete events[evt]
        }
        return {
            on: on,
            fire: fire,
            off: off
        }
    })();


Event.on('change', function(val){
    console.log('change...  now val is ' + val);  
});
Event.fire('change', '饥人谷');
Event.off('changer');

相关文章

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 设计模式笔记汇总

    目录 设计原则 “依赖倒置”原则 未完待续... 设计模式 设计模式——策略模式 设计模式——装饰者模式 设计模式...

  • 设计模式

    《C#设计模式》 《C#设计模式》-设计模式概述 《C#设计模式》-面向对象设计原则 《C#设计模式》-单例模式 ...

  • 浅谈JS的一些设计模式

    @(书籍阅读)[JavaScript, 设计模式] 常见设计模式 设计模式简介 设计模式概念解读 设计模式的发展与...

  • 前端设计模式

    JS设计模式一:工厂模式jS设计模式二:单例模式JS设计模式三:模块模式JS设计模式四:代理模式JS设计模式五:职...

  • 设计模式之工厂模式

    设计模式之工厂模式 标签(空格分隔): 设计模式 工厂模式 设计模式的感念 设计模式的应用 工厂设计模式的产生 工...

  • JavaJavascript基础进阶(十七)JS中常用的设计模式

    单利设计模式、构造原型设计模式、发布订阅设计模式、promise设计模式 单利模式 构造原型设计模式 最贴近OOP...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • 第1章 设计模式概述

    一、设计模式的概念 二、设计模式的历史 三、设计模式的要素 四、设计模式的分类 ■ 创建型设计模式 ■ 结构型设计...

  • iOS设计模式(3)适配器模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(4)抽象工...

网友评论

      本文标题:设计模式

      本文链接:https://www.haomeiwen.com/subject/srcrdxtx.html