設(shè)計(jì)模式

  • ** 寫出 構(gòu)造函數(shù)模式、混合模式、模塊模式、工廠模式、單例模式、發(fā)布訂閱模式的范例。**

  • 單例模式

     var People = (function(){
         var instance;
         function init(name){
     //定義私有變量和方法
     
          return {
         //定義共有變量和方法(可以訪問私有變量和方法)
         sayName:function(){
             console.log(name);
         }
     };
     }
    
     return {
         getInstance:function(name){
             if(!instance){
                 instance = init(name);
             }
             return instance;
         }
     }
     }());
    
      var p1 = People.getInstance("jack");
      var p2 = People.getInstance("keanu");
      p1 == p2; //true
     //console.log(p1 == p2);
    
  • 構(gòu)造函數(shù)模式

     function Person(name) {
         this.name = name;
     }
     Person.prototype = {
         say: function () {
             console.log(this.name)
         }
     }
     var p2 = new Person('Rick');
    
  • 混合模式 -繼承

     var Person = function (name,age) {
         this.name = name;
         this.age = age;
     }
     Person.prototype = {
     sayName: function () {
         console.log(this.name)
        }
      }
     var Student = function (name,age,score) {
          Person.call(this,name,age);
         this.score = score;
     }
    
     //Student.prototype = Object.create(Person.prototype)
      Student.prototype = create(Person.prototype)
      function create(fn) {
           function F(){};
           F.prototype = fn;
      return new F()
      }
    
       Student.prototype.constructor = Student;
       Student.prototype.sayScore = function(){
            console.log(this.score);
       }
    
     var student = new Student('Nick',23,90)
    
  • 模塊模式

     var Person = (function(){
     function changeName(name) {
         this.name = name;
     }
     function sayName() {
         console.log(this.name)
     }
     return{
         change: changeName,
         say: sayName
     }
     })()
    
  • 工廠模式

     var People=function(name,age){
         return {
             name:name,
             age:age,
             sayName:function(){
                 console.log('my name is '+this.name);
             },
             setAge:function(age){
                 this.age=age;  
             },
             getAge:function(){
                 console.log(this.age);
             }
         }
     }
     var p3=People('jack',24);
     p3.sayName();
     p3.getAge();
     p3.setAge(27);
     p3.getAge();
    
  • 發(fā)布訂閱模式

     <script type="text/javascript">
      var EventCenter = (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);
     }
     }
     return {
         on: on,
         fire: fire
     }
     })();
    
     EventCenter.on('my_event', function(data){
           console.log('my_event ...');
     });
    
     EventCenter.fire('my_event');
     </script>
    
  • ** 使用發(fā)布訂閱模式寫一個(gè)事件管理器,可以實(shí)現(xiàn)如下方式調(diào)用**

    var Event=(function(){
    var events={};
    function on(evt,handler){
        events[evt]=events[evt] || [];
        events[evt].push({
            handler:handler
      })
    }
    function fire(evt,arg){
      if(!events[evt]){
          return 
      }
      for(var i=0;i<events[evt].length;i++){
          events[evt][i].handler(arg)
      }
    }
    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', '饑人谷'); //change...  now val is 饑人谷
    Event.off('change');
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 寫出 構(gòu)造函數(shù)模式、混合模式、模塊模式、工廠模式、單例模式、發(fā)布訂閱模式的范例。 使用發(fā)布訂閱模式寫一個(gè)事件管理器...
    coolheadedY閱讀 358評論 0 0
  • 問答 1.寫出構(gòu)造函數(shù)模式、混合模式、模塊模式、工廠模式、單例模式、發(fā)布訂閱模式的范例。 工廠模式,想造什么造什么...
    GarenWang閱讀 375評論 0 0
  • 工廠模式類似于現(xiàn)實(shí)生活中的工廠可以產(chǎn)生大量相似的商品,去做同樣的事情,實(shí)現(xiàn)同樣的效果;這時(shí)候需要使用工廠模式。簡單...
    舟漁行舟閱讀 7,827評論 2 17
  • 寫出 構(gòu)造函數(shù)模式、混合模式、模塊模式、工廠模式、單例模式、發(fā)布訂閱模式的范例。構(gòu)造函數(shù)模式var Person ...
    htkz_117f閱讀 161評論 0 0
  • 一、構(gòu)造函數(shù)模式、混合模式、模塊模式、工廠模式、單例模式、發(fā)布訂閱模式的范例 單例模式單例就是保證一個(gè)類只有一個(gè)實(shí)...
    任少鵬閱讀 392評論 0 0