1. 程式人生 > >Gank基友系列--簡單的純單例實現

Gank基友系列--簡單的純單例實現

Gank模式開啟

今天很是無聊,又去逛了基友的部落格。在裡面讀了兩篇部落格,一篇說的是單例設計模式,一篇說的是關於他這篇單例設計模式的反射侵犯

好奇心驅使

關於基友文章裡的單例模式的確是有BUG的,那種方式是可以被輕鬆破壞掉的。在上面第二篇部落格中也有詳細的程式碼介紹。並且在第一篇部落格末尾,他推薦使用列舉單例模式。列舉單例模式被稱為實現單例模式成為最佳的方法。大家一定要學。但是那種方式非常的高大上,於是本著好奇心原則,我寫了一個非常平民化的純正單例模式。

程式碼

package com.blaze.study.designpattern;

import java.lang.reflect.Constructor;

/**
 * Created by sherlockblaze on 25/06/2017.
 */
class RealInstance{ public static boolean flag = false; private RealInstance(){ synchronized (RealInstance.class){ if(flag == false) flag = !flag; else throw new RuntimeException("別太過分"); } } private static class SingleHolder{ private
static final RealInstance REAL_INSTANCE = new RealInstance(); } public static RealInstance getInstance(){ return SingleHolder.REAL_INSTANCE; } } public class Demo_01 { public static void main(String[] args)throws Exception{ Class classobj = Class.forName("com.blaze.study.designpattern.RealInstance"
); Constructor constructor = classobj.getDeclaredConstructor(); constructor.setAccessible(true); Object obj1 = constructor.newInstance(); System.out.println(obj1); Object obj2 = constructor.newInstance(); System.out.println(obj2); } }

結果

反射結果

最後

歡迎大家訪問我的部落格

相關推薦

Gank系列--簡單的純實現

Gank模式開啟 今天很是無聊,又去逛了基友的部落格。在裡面讀了兩篇部落格,一篇說的是單例設計模式,一篇說的是關於他這篇單例設計模式的反射侵犯。 好奇心驅使 關於基友文章裡的單例模式

LintCode-實現

條件 需要 tco style 構造方法 ack 線程 lin == 單例模式: 對於任何時刻,如果某個類只存在且最多存在一個具體的實例;所以單例模式需要具備幾個條件: 1、自己對象的變量必須私有; 2、構造方法必須私有,不能從外部調用; 3、實現線程鎖;

模式,最好的實現方式,靜態內部類的方式

單例模式的優點: 1.在記憶體中只有一個物件,節約記憶體 2.避免頻繁的建立和銷燬物件,可以提高效能 3.避免對共享資源的多重佔用 4.可以全域性訪問 適用場景: 1.需要頻繁例項化然後銷燬的物件 2.

實現

  public class WSServer { private static class SingletionWSServer { /* static修飾的變數是類變數,物件例項化之前就存在的變數,

Unity之C#——用實現一個遊戲內部的音效控制器

       Unity之C#--用單例實現一個遊戲內部的音效控制器         在遊戲開發中,音效是很重要的一環,沒有音效的遊戲就沒有靈魂,所以實現聲音控制是很有必要的,同時,音效可能還會因玩家的性別不同,

Android使用列舉實現Toast快速重新整理(自定義吐司)

通常我們使用Toast的時候可能會直接這樣寫: Toast.makeText(context, text, duration).show(); 這樣寫通常會有這樣一個問題:新Toast要等上一次Toast結束後才能顯示出來    1.在MyApplicatio

完美的實現(The Perfect Singleton)

原文連結  作者: 我經常遇到一些這樣的Java程式設計師,他們不確定應該如何恰當的實現單例模式。 我不考慮線上程的環境中合適的實現。但是使用你能在網路上找到的大多數常見的實現方式,你可以輕鬆地建立你想要的多種單例實現。 假設你有下面這種常見的單例的實現: public final clas

C++ Singleton實現方式

1.singleton模式的意圖是什麼?或者說使用singleton模式解決的問題是什麼? 答:保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點,該例項被所有程式模組共享!!! 2.解決上述問

js模式的es5實現和es6實現,以及通用惰性實現

單例模式 es5實現 es6實現 單例模式 一開始不建立例項物件,當第一次使用時才建立 用一個變數標誌當前是否已經為某個類建立過物件,如果已建立則在下次獲取時返回之前建立的例項

ios學習--實現的幾種方式

在 iOS 開發過程中,我們經常會用到各種單例,例如 NSFileManager,UIApplication等,這些是系統給我們提供的單例類;有很多時候由於各種各樣的原因,我們自己也需要寫單例;   下面來說一下我們常用到幾種單例的實現方式:   1.第一種方式,重寫+al

實現聲音播放工具類(支援多個聲音同時播放)

一直疑惑遊戲裡面的多個音效同時播放是怎麼實現的,今天終於弄明白了,單例實現,看程式碼: YJAudioTool.h #import <Foundation/Foundation.h> #import <AVFoundation/AVFo

可繼承擴充套件的實現

最近在程式碼閱讀中看到了一種可繼承的單例實現,對使用者而言通過單例基類到定義的靜態介面獲取例項,而不必關心實際的單例實現。靈活性上,可通過繼承的重寫虛介面的方式實現單例功能的擴充套件。基礎程式碼如下: /* TestSingleton.h */ #inc

eval、exec及元類、實現的5種方法

管理 wrap `` assm 當前 name 出發點 tac 全局 eval內置函數 # eval內置函數的使用場景:# 1.執行字符串會得到相應的執行結果# 2.一般用於類型轉化,該函數執行完有返回值,得到dict、list、tuple等?dic_str =

[js高手之路]設計模式系列課程-模式實現模態框

ges 點擊 eat abs select nbsp str osi 控制 什麽是單例呢? 單,就是一個的意思。例:就是實例化出來的對象,那合在一起就是保證一個構造函數只能new出一個實例,為什麽要學習單例模式呢?或者說單例模式有哪些常見的應用場景.它的使用還是很廣泛,比如

Java 設計模式系列(五)模式

重要 理解 iat 版本 ide 默認 ces 內部實現 成功 Java 設計模式系列(五)單例模式 單例模式確保某個類只有一個實例,而且自行實例化並向整個系統提供這個實例。 一、懶漢式單例 /** * 懶漢式單例類.在第一次調用的時候實例化自己 * 1. 構造器私

C++模式的模板

單例模式是很常用的設計模式,如果希望系統中某個類的物件只能有一個或者有一個就夠了,那麼便可以採用單例模式來解決。 下面用C++實現一個單例模板類,那麼其他的類只需繼承它,便可以成為單例類。 本例中使用了 CMutex類,是考慮多執行緒的情況,這個類的定義請參見筆者的另一篇部落格《C++簡

【設計模式系列-創造型模式篇】-設計模式

單例模式定義 單例模式是一個比較簡單的模式,其定義如下:Ensure a class has only one instance,and provide a global point of access to it.確保某一個類只有一個例項,而且自行例項化並向整個系統提供這個例項。 單例模式應用場景 1

高效能的執行緒安全——Java基礎語法系列

大家都知道,一般實現單例有兩種寫法: 餓漢式 和 懶漢式, 餓漢式是執行緒安全的,在編譯期間已完成初始化,載入到了記憶體裡。 懶漢式一般寫法是非執行緒安全的, 那懶漢式的執行緒安全單例應該如何實現呢,以及如何寫出低耗能的執行緒安全單例呢 ? 單例實現關鍵點 建構函式私有,

c++ 模式 元函式

一.設計模式 單例模式(類只能生成一個物件) 遮蔽建構函式,拷貝建構函式(放在private中 類外無法訪問),此時類外就無法看到這兩個函數了 也就無法生成物件了 類就沒有意義了 類中給出一個介面(getInstance) 生成唯一物件 返回值為類型別的指標或引用(不生

設計模式系列 - 模式

單例模式就是指單例類在一定的生命週期內只能有一個物件例項,單例類的建立必須是本身,並能給使用者提供自身。 介紹 在現實世界中,每個生命體都可以被看做是一個單例物件,唯一且具體,具有不可複製性。同樣的,在軟體開發領域中,有時我們需要保證客戶端在當前的客戶機上只能執行一個例項這個時候,我們就應該考慮