Java是一種廣泛應(yīng)用于軟件開發(fā)領(lǐng)域的高級編程語言,其設(shè)計(jì)包含了眾多的設(shè)計(jì)模式。在開發(fā)中,單例模式和工廠模式是兩種最為常用的設(shè)計(jì)模式。
單例模式是一種保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問該實(shí)例的全局訪問點(diǎn)的模式。單例模式的主要思想是將構(gòu)造方法設(shè)為私有的,然后在類的內(nèi)部定義一個(gè)私有的靜態(tài)對象,并提供一個(gè)靜態(tài)方法來獲取該實(shí)例。下面是一個(gè)典型的單例模式的代碼示例:
public class Singleton { private static Singleton instance; private Singleton() { // private constructor } public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
上述代碼中,通過私有構(gòu)造方法來保證只有類內(nèi)部才可以創(chuàng)建對象實(shí)例。然后使用私有的靜態(tài)變量instance來記錄單例對象實(shí)例,并提供一個(gè)靜態(tài)方法getInstance()來返回單例對象。
工廠模式則是通過將實(shí)際的對象創(chuàng)建過程單獨(dú)封裝起來,從而在使用時(shí)可以直接調(diào)用工廠方法來獲取需要的對象。工廠模式是一種廣泛使用的對象創(chuàng)建型模式,在復(fù)雜的軟件系統(tǒng)中應(yīng)用非常廣泛。下面是一個(gè)簡單的工廠模式示例:
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接口來聲明所有形狀對象的方法,然后定義兩個(gè)實(shí)現(xiàn)了Shape的具體類Rectangle和Square。最后創(chuàng)建一個(gè)工廠類ShapeFactory,它根據(jù)傳遞給getShape方法的字符串參數(shù),從而返回具體的形狀實(shí)例。