首頁 > Java > java教程 > 主體

java設計模式中單例模式講解

巴扎黑
發布: 2017-07-21 17:03:45
原創
1391 人瀏覽過

學習到java一共有23種設計模式,設計模式是被大多數人知曉,重複使用,約定俗成的程式碼經驗總結。每種設計模式都代表了在專案中會重複發生的問題,所以合理的運用設計模式可以完美的解決許多問題。

學習java的設計模式是很必要的。雖然在物件導向還沒學到繼承和接口,但是23中設計模式中的單例模式已經可以了解了。

單例物件(Singleton)是一種常用的設計模式。在Java應用中,單例物件能保證在一個JVM中,該物件只有一個實例存在。具體有兩種表現形式:

package 面向对象;//单例设计模式第一种public class Singleton 
{public static void main(String[] args)
    {
    SingletonDemo a=SingletonDemo.getInstance();
    }
}class SingletonDemo
{private static SingletonDemo a =null;private SingletonDemo(){}public static SingletonDemo getInstance()
    {if(a==null)
        {
            SingletonDemo a=new SingletonDemo();
        }return a;
    }
}
登入後複製

這種方式可以看出在呼叫方法時才創建新的對象,但是在多執行緒時容易產生問題,所以一般開發用的是下面的一種方式。

 1 package 面向对象; 2  3 public class Singleton_2 
 4 { 5     public static void main(String[] args) 6     { 7         Singleton_2Demo a=Singleton_2Demo.getInstance(); 8     } 9 }10 11 class Singleton_2Demo12 {13     private Singleton_2Demo(){}14     private static Singleton_2Demo a=new Singleton_2Demo();15     public static Singleton_2Demo getInstance()16     {17         return a;18     }19 }
登入後複製

這種方式簡單,不用考慮多執行緒的問題

透過這個設計模式對之前學習時寫的物件導向的練習調整了一下,實現了單例的模式。

原始程式碼:

package 面向对象; class Student 
{    private String name;private int number;private String sex;private boolean learn;private String a;
    Student()
     {
         name="未知";
         number=000;
         sex="未知";
         learn=false;
         a="未知";
     }     public void setName(String name)
     {         this.name=name;
     }     public void setNumber(int number)
     {         this.number=number;
     }     public void setSex(String sex)
     {         this.sex=sex;
     }     public void setLearn(boolean learn)
     {         this.learn=learn;
     }     void scan()
    {if(this.learn==true)
        {
            a="在学习";    
        }else{
            a="不在学习";
        }    
         System.out.print("姓名:"+this.name+" 学号:"+this.number+" 性别;"+this.sex+" 是否在学习:"+a);
    }
    
} class Data
 {     public static void main(String[] arg)
     {
         Student XiaoMin=new Student();
         XiaoMin.setName("小明");
         XiaoMin.setNumber(13023);
         XiaoMin.setSex("男");
         XiaoMin.setLearn(true);
         XiaoMin.scan();
     }
 }
登入後複製

#單一範例模式:

package 面向对象;//实现单例设计模式
 class Student_1 
{    private String name;private int number;private String sex;private boolean learn;private String a;     private Student_1()
     {
         name="未知";
         number=000;
         sex="未知";
         learn=false;
         a="未知";
     }     private static Student_1 b=new Student_1();     public static Student_1 getInstance()
     {         return b;
     }     public void setName(String name)
     {         this.name=name;
     }     public void setNumber(int number)
     {         this.number=number;
     }     public void setSex(String sex)
     {         this.sex=sex;
     }     public void setLearn(boolean learn)
     {         this.learn=learn;
     }     void scan()
    {if(this.learn==true)
        {
            a="在学习";    
        }else{
            a="不在学习";
        }    
         System.out.print("姓名:"+this.name+" 学号:"+this.number+" 性别;"+this.sex+" 是否在学习:"+a);
    }
    
} class Data_2
 {     public static void main(String[] arg)
     {
         Student_1 XiaoMin=Student_1.getInstance();
         XiaoMin.setName("小王");
         XiaoMin.setNumber(13023);
         XiaoMin.setSex("男");
         XiaoMin.setLearn(true);
         XiaoMin.scan();
     }
 }
登入後複製

 

以上是java設計模式中單例模式講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板