笔记:Java中的单例设计模式
????????之前接觸過(guò)單例模式,當(dāng)初不明白這樣的設(shè)計(jì)用意,今天特地研究了下java中的單例設(shè)計(jì)模式的用處及用法。
????????單例模式:單例模式是一種常用的軟件設(shè)計(jì)模式。在它的核心結(jié)構(gòu)中只包含一個(gè)被稱(chēng)為單例類(lèi)的特殊類(lèi)。一個(gè)類(lèi)有且僅有一個(gè)實(shí)例,并且自行實(shí)例化向整個(gè)系統(tǒng)提供。
????????單例模式的用處:一個(gè)系統(tǒng)中可以存在多個(gè)打印任務(wù),但是只能有一個(gè)正在工作的任務(wù);一個(gè)系統(tǒng)只能有一個(gè)窗口管理器或文件系統(tǒng);一個(gè)系統(tǒng)只能有一個(gè)計(jì)時(shí)工具或ID(序號(hào))生成器。如在Windows中就只能打開(kāi)一個(gè)任務(wù)管理器。如果不使用機(jī)制對(duì)窗口對(duì)象進(jìn)行唯一化,將彈出多個(gè)窗口,如果這些窗口顯示的內(nèi)容完全一致,則是重復(fù)對(duì)象,浪費(fèi)內(nèi)存資源;如果這些窗口顯示的內(nèi)容不一致,則意味著在某一瞬間系統(tǒng)有多個(gè)狀態(tài),與實(shí)際不符,也會(huì)給用戶(hù)帶來(lái)誤解,不知道哪一個(gè)才是真實(shí)的狀態(tài)。因此有時(shí)確保系統(tǒng)中某個(gè)對(duì)象的唯一性即一個(gè)類(lèi)只能有一個(gè)實(shí)例非常重要。http://baike.baidu.com/view/1859857.htm
????例子代碼如下:
????????
????????????????public class TestSingleMode {
?????????????????????????public static void main(String[] args) {
??
??? ????????????????????Singleton s1 = null ;//創(chuàng)建對(duì)象s1
??? ????????????????????Singleton s2 = null ;//創(chuàng)建對(duì)象s2
??????????????????????? s1 = Singleton.getInstance() ;//把類(lèi)中的實(shí)例化對(duì)象傳遞給s1
??????????????????????? s1.print() ; //調(diào)用print方法打印輸出
??????????????????????? s2 = Singleton.getInstance() ;//把類(lèi)中的實(shí)例化對(duì)象傳遞給s2
??????????????????????? s2.print() ; //調(diào)用print方法打印輸出
???
??????????????????????? s2.setName("jack");
??????????????????????? s2.setAge(2);
???
??????????????????????? s1.print();
?????????????????????????}
????????????????}
????????????????class Singleton ?{//定義Singleton類(lèi)
?????????????????//在類(lèi)的內(nèi)部用靜態(tài)實(shí)例化對(duì)象并私有化
?????????????????????private static Singleton instance = new Singleton() ;
?????????????????//用靜態(tài)方式定義getter方法取回instance對(duì)象
?????????????????????public static Singleton getInstance(){
??????????????????????????return instance ;
?????????????????????}
?????????????????????private String name ; //定義name屬性
?????????????????????private int age ;? //定義age屬性
?????????????????????private Singleton(){} //無(wú)參構(gòu)造 并私有化
?????????????????????public void setName(String name){ //setter方法
??????????????????????????this.name = name ;
?????????????????????}????
?????????????????????public String getName(){ //getter方法
??????????????????????????return this.name ;
?????????????????????}
?????????????????????public void setAge(int age){//setter方法
??????????????????????????this.age = age ;
?????????????????????}
?????????????????????public int getAge(){ //getter方法
??????????????????????????return this.age ;
?????????????????????}
?????????????????????public void print(){ //定義一個(gè)打印輸出的方法
??????????????????????????System.out.println("姓名:" + getName() + "年齡:" + getAge()) ;
?????????????????????}
????????????????}
????????????運(yùn)行結(jié)果:
????????????????????姓名:null年齡:0
????????????????????姓名:null年齡:0
????????????????????姓名:jack年齡:2
????????????總結(jié):s1 與 s2 指向同一對(duì)象,當(dāng)修改s2的值時(shí),s1的值也會(huì)改變。
?
轉(zhuǎn)載于:https://blog.51cto.com/kingstar/1531703
總結(jié)
以上是生活随笔為你收集整理的笔记:Java中的单例设计模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Windows Server 2012
- 下一篇: 代码块重定向