SlideShare a Scribd company logo
1 of 17
Download to read offline
一个艰难的决定
    云渺
 2010.11.08
9月27日
   360推出个人隐私保护器,专门曝光“窥私”软件, 直指QQ。
9月28日
   腾讯称360浏览器涉嫌借色情网站推广
10月14日
   腾讯正式起诉360不正当竞争
10月28日
   360弹窗指责马化腾享受经适房补贴
10月29日
   360推扣扣保镖 称让QQ安全快速更好用
 11月3日
   腾讯决定在装有360软件的电脑上将不能使用QQ。对此360推出360 Web QQ
客户端,但旋即被腾讯以关闭Web QQ服务的方式回击。
11月4日
   360要求腾讯向6亿QQ注册用户道歉
11月5日
   金山、傲游、可牛、百度、搜狗五厂商今日在北京召开联合发布会,宣布将
不兼容360系列软件。
?
世界 浏览器 使用统计
中国 浏览器 使用统计
中国 手机浏览器 使用统计
世界 搜索引擎 使用统计
http://gs.statcounter.com/
单例是一个只能被实例化一次并且可以通过一
           ?
个众所周知的访问点访问的类。

public class Singleton {
  private static Singleton uniqueInstance = null; //标识
  private Singleton(){ } //构造函数
  public static Singleton getInstance() {
        if (uniqueInstance == null){
                 uniqueInstance = new Singleton ();
        }
        return uniqueInstance;
  }
}

Singleton. getInstance(); //获取单例
?
JavaScript单例是一个用来划分命名空间并将一批
  相关方法和属性组织在一起的对象

// 最简单的单例
var Singleton = {
   attribute1: true,
   attribute2: 12,
   method1: function(){
        …
   },
   method1: function(){
        …
   }
}
划分命名空间:                      ?
Ext = { }; //全局

//防止全局变量污染、使代码组织有序合理
Ext.util = { };
Ext.lib = { };

Ext.util.JSON = { };
Ext.util.Observable = { };
Ext.util.TaskRunner = { };
网页专用代码的包装器
                               ?
Namespace.pageName = {
  // page contants.
  CONSTANT_1: true,
  CONSTANT_2: true,

    // page methods.
    method1: function(){ … },
    method2: function(){ … },

    // Initializtion method.
    init: function(){ … }
}

addLoadEvent(Namespace.pageName.init);
拥有私有成员的单例(下划线表示法)
                                   ?
GiantCorp.DataParser = {

    // Private methods.
    _stripWhitespace: function (str){
          return str.replace(/s+/, ‘’);
    },
    _stringSplit: function (str, delimiter){
          return str.split(delimiter);
    }

    // Public method.
    stringToArray: function(str, delimiter, stripWS){
         …
    }
}
拥有私有成员的单例(使用闭包)
                          ?
MyNameSpace.Singleton = (function(){
   // Private members.
   var privateAttribute1 = false;
   function privateMethod1(){
        …
   }
   return {
        // Public members.
        publicAttribute1: 10,
        publicMethod1: function(){
                …
        }
   }
})();
惰性实例化

MyNameSpace.Singleton = (function(){         return {
                                                   getInstance: function(){
   var uniqueInstance;                                if(!uniqueInstance){
                                                           uniqueInstance = constructor();
   function constructor(){                            }
         // Private members.                          return uniqueInstance;
         var privateAttribute1 = false;            }
         function privateMethod1(){          }
                   …
         }                                })();
         return {
                   // Public members.
                   atttibute1: 10,
                   method1: function(){
                             …
                   }
         }
   }                                      MyNameSpace.Singleton.getInstance().method1();
Thanks!

More Related Content

More from Koubei UED

More from Koubei UED (20)

Banquet 43
Banquet 43Banquet 43
Banquet 43
 
Banquet 41
Banquet 41Banquet 41
Banquet 41
 
Banquet 40
Banquet 40Banquet 40
Banquet 40
 
Banquet 39
Banquet 39Banquet 39
Banquet 39
 
Banquet 38
Banquet 38Banquet 38
Banquet 38
 
Banquet 37
Banquet 37Banquet 37
Banquet 37
 
Banquet 36
Banquet 36Banquet 36
Banquet 36
 
Koubei banquet 35
Koubei banquet 35Koubei banquet 35
Koubei banquet 35
 
Koubei banquet 34
Koubei banquet 34Koubei banquet 34
Koubei banquet 34
 
Koubei banquet 33
Koubei banquet 33Koubei banquet 33
Koubei banquet 33
 
Koubei banquet 32
Koubei banquet 32Koubei banquet 32
Koubei banquet 32
 
Koubei banquet 31
Koubei banquet 31Koubei banquet 31
Koubei banquet 31
 
Koubei banquet 30
Koubei banquet 30Koubei banquet 30
Koubei banquet 30
 
Koubei banquet 29
Koubei banquet 29Koubei banquet 29
Koubei banquet 29
 
Koubei banquet 28
Koubei banquet 28Koubei banquet 28
Koubei banquet 28
 
Koubei banquet 27
Koubei banquet 27Koubei banquet 27
Koubei banquet 27
 
Koubei banquet 26
Koubei banquet 26Koubei banquet 26
Koubei banquet 26
 
Koubei banquet 25
Koubei banquet 25Koubei banquet 25
Koubei banquet 25
 
Banquet 24
Banquet 24Banquet 24
Banquet 24
 
Banquet 23
Banquet 23Banquet 23
Banquet 23
 

Banquet 47

  • 1. 一个艰难的决定 云渺 2010.11.08
  • 2.
  • 3. 9月27日 360推出个人隐私保护器,专门曝光“窥私”软件, 直指QQ。 9月28日 腾讯称360浏览器涉嫌借色情网站推广 10月14日 腾讯正式起诉360不正当竞争 10月28日 360弹窗指责马化腾享受经适房补贴 10月29日 360推扣扣保镖 称让QQ安全快速更好用 11月3日 腾讯决定在装有360软件的电脑上将不能使用QQ。对此360推出360 Web QQ 客户端,但旋即被腾讯以关闭Web QQ服务的方式回击。 11月4日 360要求腾讯向6亿QQ注册用户道歉 11月5日 金山、傲游、可牛、百度、搜狗五厂商今日在北京召开联合发布会,宣布将 不兼容360系列软件。
  • 4.
  • 10. 单例是一个只能被实例化一次并且可以通过一 ? 个众所周知的访问点访问的类。 public class Singleton { private static Singleton uniqueInstance = null; //标识 private Singleton(){ } //构造函数 public static Singleton getInstance() { if (uniqueInstance == null){ uniqueInstance = new Singleton (); } return uniqueInstance; } } Singleton. getInstance(); //获取单例
  • 11. ? JavaScript单例是一个用来划分命名空间并将一批 相关方法和属性组织在一起的对象 // 最简单的单例 var Singleton = { attribute1: true, attribute2: 12, method1: function(){ … }, method1: function(){ … } }
  • 12. 划分命名空间: ? Ext = { }; //全局 //防止全局变量污染、使代码组织有序合理 Ext.util = { }; Ext.lib = { }; Ext.util.JSON = { }; Ext.util.Observable = { }; Ext.util.TaskRunner = { };
  • 13. 网页专用代码的包装器 ? Namespace.pageName = { // page contants. CONSTANT_1: true, CONSTANT_2: true, // page methods. method1: function(){ … }, method2: function(){ … }, // Initializtion method. init: function(){ … } } addLoadEvent(Namespace.pageName.init);
  • 14. 拥有私有成员的单例(下划线表示法) ? GiantCorp.DataParser = { // Private methods. _stripWhitespace: function (str){ return str.replace(/s+/, ‘’); }, _stringSplit: function (str, delimiter){ return str.split(delimiter); } // Public method. stringToArray: function(str, delimiter, stripWS){ … } }
  • 15. 拥有私有成员的单例(使用闭包) ? MyNameSpace.Singleton = (function(){ // Private members. var privateAttribute1 = false; function privateMethod1(){ … } return { // Public members. publicAttribute1: 10, publicMethod1: function(){ … } } })();
  • 16. 惰性实例化 MyNameSpace.Singleton = (function(){ return { getInstance: function(){ var uniqueInstance; if(!uniqueInstance){ uniqueInstance = constructor(); function constructor(){ } // Private members. return uniqueInstance; var privateAttribute1 = false; } function privateMethod1(){ } … } })(); return { // Public members. atttibute1: 10, method1: function(){ … } } } MyNameSpace.Singleton.getInstance().method1();