1. 程式人生 > >JAVA中23種設計模式之單例模式

JAVA中23種設計模式之單例模式

1. 最簡單的單例模式

  1. 什麼叫單例模式:口語表達就是——一個類有且僅有一個物件,外部無法例項化它的新物件。只能通過呼叫的getXXX()方法來例項化物件,這個方法是自定義的。
  2. 最簡單的單例模式例子

2. 例如

建立一個類,將這類變成單例模式的

package demo;
//自定義的類預設情況,是非單例的
public class MyService {

    //單例模式中,使用靜態的當前類的物件,來作為它的屬性
    //靜態屬性
    private static MyService myservice;

    private MyService(){

    }

    /**
     * 自定義新增的靜態方法,用來構造單例模式
     * 不允許直接通過new一個物件來建立這個類的例項
     * @return
*/
public static MyService getMyServiceInstance(){ if(myservice==null){ myservice = new MyService(); } return myservice; } }

建立一個正常的類

package demo;

public class MyService_not {

    public void getMyService_not(){
        System.out.println("這是一個非單例模式下的構造方法"
); } }

接下來我們來看看單例模式和普通類到底有什麼區別

寫個測試

package demo;

public class Test {

    public static void main(String[] args) {

        // MyService ms1 = new Myservice(); 這種直接通過new的方法建立例項是不會成功的
        MyService myService1 = MyService.getMyServiceInstance();
        MyService myService2 = MyService.getMyServiceInstance();

        //單例模式下例項化的2個物件
System.out.println(myService1); System.out.println(myService2); System.out.println(myService1 == myService2);//相等true MyService_not not1 = new MyService_not(); MyService_not not2 = new MyService_not(); //非單例模式下例項化的2個物件 System.out.println(not1); System.out.println(not2); System.out.println(not1==not2);//不相等 false } }

控制檯結果

demo.MyService@2f57d162
demo.MyService@2f57d162
true
demo.MyService_not@3639b3a2
demo.MyService_not@6406c7e
false
  • 可以看到從單例模式下,例項化出來的物件是一模一樣的,而一般類例項化出的兩個物件,是在堆區開闢出兩個記憶體,將這個物件的記憶體地址傳給棧區,棧區的這個物件的引用指向開闢出來的記憶體,所以兩個物件是兩塊記憶體,兩個地址,所以不一樣,而單例模式下,是一塊記憶體。這就是單例模式的特點。
  • 寫在後面,這是我第一次寫部落格,今年剛畢業進入軟體崗位,希望和我們一路提高自己,成為攻城獅。謝謝大家,如果覺得對親有用的話,請頂一下吧