Java是一種廣泛應(yīng)用的編程語言,其擁有許多設(shè)計模式來優(yōu)化代碼的結(jié)構(gòu)和性能。在本篇文章中,我將介紹兩種常用的設(shè)計模式:單例模式和工廠模式。
1. 單例模式
單例模式是一種創(chuàng)建型設(shè)計模式,該模式確保一個類只有一個實例,并提供一個全局訪問點。這種模式允許在系統(tǒng)中隨處訪問唯一的實例,從而確保該實例的狀態(tài)不會被其他對象更改。
public class Singleton { private static Singleton instance; private Singleton() {} public static synchronized Singleton getInstance() { if(instance == null) { instance = new Singleton(); } return instance; } public void showMessage() { System.out.println("Hello World!"); } }
在上面的示例代碼中,Singleton類的構(gòu)造函數(shù)被聲明為私有的,這意味著它只能在類內(nèi)部進行實例化。getInstance()方法檢查實例是否存在,如果不存在,則創(chuàng)建新實例并返回其引用。由于getInstance()是同步的,因此只有一個線程可以訪問它,從而保證了只有一個實例被創(chuàng)建。
2. 工廠模式
工廠模式是一種創(chuàng)建型設(shè)計模式,用于將對象的創(chuàng)建過程從客戶端代碼中解耦出來。這種模式允許創(chuàng)建不同類型的對象,而無需暴露它們的創(chuàng)建邏輯。在工廠模式中,客戶端代碼不會直接調(diào)用對象的構(gòu)造函數(shù),而是通過工廠類創(chuàng)建對象。
public interface Shape { void draw(); } public class Rectangle implements Shape { @Override public void draw() { System.out.println("Inside Rectangle::draw() method."); } } public class Square implements Shape { @Override public void draw() { System.out.println("Inside Square::draw() method."); } } public class ShapeFactory { public Shape getShape(String shapeType){ if(shapeType == null){ return null; } if(shapeType.equalsIgnoreCase("RECTANGLE")){ return new Rectangle(); } else if(shapeType.equalsIgnoreCase("SQUARE")){ return new Square(); } return null; } }
在上面的代碼示例中,Shape是一個接口,定義了一個draw()方法。Rectangle和Square類都實現(xiàn)了Shape接口,并覆蓋了draw()方法。ShapeFactory是一個工廠類,根據(jù)傳入的參數(shù)來創(chuàng)建不同類型的對象。
使用工廠模式,客戶端代碼可以創(chuàng)建不同的Shape對象,而不需要知道它們的創(chuàng)建邏輯。這種模式使得代碼更清晰和易于維護。