<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 單例模式 英文名稱:(Singleton Pattern) **定義**:確保某一個類只用一個實例,而且自行實例化并向整個系統提供這個實例 UML圖: ![](https://box.kancloud.cn/2016-06-06_57553407ce5ab.jpg) ~~~ public class SingletonTest { public static void main(String[] args) { //通過Singleton對外暴漏的方法,進行實例化。并保證只有一個實例 Singleton single = Singleton.getInstance(); System.out.println(single.toString()); } } //又稱餓漢式單例模式 class Singleton{ private static final Singleton single = new Singleton(); private Singleton(){ } public static Singleton getInstance(){ return single; } } //又稱懶漢式單例模式 //<span style="font-size:18px;">懶漢式單例模式在遇到高并發情況,系統有壓力增大,可能會出現多個實例的對象。</span> class Singleton1{ private static Singleton1 single = null; private Singleton1(){ } public static Singleton1 getInstance(){ if(single==null){ synchronized (Singleton1.class) { // if(single==null){ single = new Singleton1(); } } } return single; } } ~~~ **(按照書本上的總結,自己理解并不太深刻。。)** **單例模式的優點:** 1、單例模式內存中只有一個實例,減少內存開支,一個對象需要頻繁的創建和銷毀。使用單例模式具有很大的優勢。 2、單例只生成一個實例,減少系統的性能開銷。 3、單例模式可以在避免對資源的多重占用。 4、單例模式可以在系統設置全局的訪問點,優化和共享資源訪問。 **單例模式的缺點:** 1、單例模式一般沒有接口,擴展很困難。 2、單例對測試不利 3、單例與單一職責原則有沖突。 **單例的使用場景:** 1、要求生成唯一序列號的環境 2、在整個項目中需要一個共享訪問點或訪問數據 3、創建一個對象需要消耗的資源過多 4、需要定義大量的靜態常量和靜態方法。 **單例的拓展** 通過單例的拓展,讓類只產生兩個或者多個實例對象。 UML圖 ![](https://box.kancloud.cn/2016-06-06_57553407e4478.jpg) ~~~ public class EmperorTest { public static void main(String[] args) { for(int i=0;i<5;i++){ //獲取Emperor對象的實例 Emperor e = Emperor.getEmperor(); e.say(); } } } class Emperor{ //定義一個list集合,用來存放對象的實例 private static List<Emperor> listEmperor = new ArrayList<Emperor>(); private static int maxNum = 2; //定義一個list集合,為創建的對象設置編號。 private static List<String> listNumofEmperor = new ArrayList<String>(); //表示當前編號 private static int currentNum = 0; //創建出所有的對象 static{ for(int i=0;i<maxNum;i++) listEmperor.add(new Emperor("實例化.."+(i+1)+"..對象")); } private Emperor(String name){ listNumofEmperor.add(name); } public static Emperor getEmperor(){ Random random = new Random(); currentNum = random.nextInt(maxNum); return listEmperor.get(currentNum); } public void say(){ System.out.println(listNumofEmperor.get(currentNum)); } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看