- JAVA設(shè)計(jì)模式之單例模式 推薦度:
- 相關(guān)推薦
Java單例設(shè)計(jì)模式
導(dǎo)語:如何設(shè)計(jì)一例簡單的JAVA語言呢?如何快速掌握設(shè)計(jì)的入門技巧呢?下面跟著小編一起來學(xué)習(xí)吧!
(1)設(shè)計(jì)模式:
解決某類問題行之有效的方法,是一種思想,是規(guī)律的總結(jié)
(2)用來保證某個(gè)類在內(nèi)存中只有一個(gè)對(duì)象
(3)保證唯一性的思想及步驟
**為了避免其他程序建立該類對(duì)象,先禁止其他程序建立該類對(duì)象,即將構(gòu)造函數(shù)私有化
**為了其他程序訪問到該類對(duì)象,須在本類中創(chuàng)建一個(gè)該類私有對(duì)象
**為了方便其他程序訪問到該類對(duì)象,可對(duì)外提供一個(gè)公共訪問方式
比如API中的Runtime類就是單例設(shè)計(jì)模式。
(4)單例設(shè)計(jì)模式的兩種方式
A:餓漢式 當(dāng)類加載的時(shí)候,就創(chuàng)建對(duì)象。
class Student
{
private Student(){}
private static final Student s = new Student();
public static Student getInstance()
{
return s;
}
}
B:懶漢式 當(dāng)使用的使用,才去創(chuàng)建對(duì)象。
class Student
{
private Student(){}
private static final Student s = null;
public static Student getInstance()
{
if(s==null)
{
//線程1就進(jìn)來了,線程2就進(jìn)來了。
s = new Student();
}
return s;
}
}
餓漢式和懶漢式的區(qū)別:
**
餓漢式是類一加載進(jìn)內(nèi)存就創(chuàng)建好了對(duì)象;
懶漢式則是類才加載進(jìn)內(nèi)存的時(shí)候,對(duì)象還沒有存在,只有調(diào)用了getInstance()方法時(shí),對(duì)象才開始創(chuàng)建。
**
懶漢式是延遲加載,如果多個(gè)線程同時(shí)操作懶漢式時(shí)就有可能出現(xiàn)線程安全問題,解決線程安全問題
可以加同步來解決。但是加了同步之后,每一次都要比較鎖,效率就變慢了,所以可以加雙重判斷來提高程序效率。
注:開發(fā)常用餓漢式,因?yàn)轲I漢式簡單安全。懶漢式多線程的時(shí)候容易發(fā)生問題
【Java單例設(shè)計(jì)模式】相關(guān)文章:
解析Java的設(shè)計(jì)模式編程之解釋器模式的運(yùn)用05-19
Java的設(shè)計(jì)模式編程中責(zé)任鏈模式的運(yùn)用的實(shí)例講解07-07
該怎么使用Java設(shè)計(jì)模式編程中的OCP開閉原則?06-29