單利設計模式?
A:保證對象在內存中只有一個。
? ? ? ? ? ? ? ? B:如何保證?
???????? ???????? ???????? **不能讓其他類來創建對象。
???????? ???????? ???????? **本類中要創建一個本類對象。
???????? ???????? ???????? **對外提供公共的訪問。
???????? ???????? C:步驟 我們的類是Student
???????? ???????? ???????? **private Student(){}
???????? ???????? ???????? **Student s = new Student();
???????? ???????? ???????? **public Student getInstance(){return s;}?
?
單利的兩種方式:
第一種方式:餓漢式
???????? class Teacher{
???????? ???????? //本類創建一個對象
???????? ???????? private static Teacher t = new Teacher();
???????? ???????? //為了保證其他類不能夠創建對象
???????? ???????? private Teacher(){}
???????? ???????? //為了外界能夠通過類名直接調用
???????? ???????? public static Teacher getInstance(){
???????? ???????? ???????? return t;
???????? ???????? }
???????? }
???????? Teacher t1 = Teacher.getInstance();
???????? Teacher t2 = Teacher.getInstance();
?
第二種方式:懶漢式
???????? class Teacher{
???????? ???????? //本類創建一個對象
???????? ???????? private static Teacher t = null;
???????? ???????? //為了保證其他類不能夠創建對象
???????? ???????? private Teacher(){}
???????? ???????? //為了外界能夠通過類名直接調用
???????? ???????? public static Teacher getInstance(){
???????? ???????? ???????? if(t==null){
? ? ? ? ? ? ? ? ? ? ? ? ? Synchronized(Teacher.class){
???????? ???????? ???????? ???????? ???????? if(t==null){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?t = new Teacher();
? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ?}
? ? ? ?}
???????? ???????? ???????? return t;
???????? ???????? }
???????? }
???????? Teacher t1 = Teacher.getInstance();
???????? Teacher t2 = Teacher.getInstance();
注意:開發一般用餓漢式。第二種在多線程的時候,會有安全隱患。
???????? ? 面試一般考懶漢式(延遲加載)
工具類:構造私有,方法靜態。直接使用類名調用,工具類一般沒有訪問數據,創建對象沒啥意義。 ???????? ???????? ???????? ???????? ???????? ? ? ? ? ?
?
?
?