在Java設(shè)計(jì)模式中,單例模式和工廠模式是兩種非常常用的模式。下面我們分別來介紹一下單例模式和工廠模式的實(shí)現(xiàn)方法以及應(yīng)用場景。
單例模式
單例模式是一種保證在整個(gè)應(yīng)用程序中只存在一個(gè)實(shí)例的設(shè)計(jì)模式。一個(gè)經(jīng)典的單例模式的實(shí)現(xiàn)方法是使用單例模式類中的靜態(tài)私有成員變量來保存這個(gè)唯一的實(shí)例,在需要的時(shí)候返回它。
public class Singleton { private static Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } }
在這個(gè)例子中,我們用一個(gè)私有的構(gòu)造器來防止外部創(chuàng)建實(shí)例,而靜態(tài)變量instance則保證了這個(gè)類實(shí)例的唯一性。另外,這個(gè)實(shí)例并不是在用戶首次調(diào)用getInstance()方法時(shí)才被創(chuàng)建,而是在單例類被加載時(shí)就創(chuàng)建好。
工廠模式
工廠模式是一種讓客戶端代碼從實(shí)際創(chuàng)建對(duì)象的工作中解耦出來的設(shè)計(jì)模式。在工廠模式中,客戶端不直接使用new操作符來創(chuàng)建對(duì)象,而是應(yīng)該向一個(gè)工廠類請(qǐng)求所需的對(duì)象。
public interface Product { void use(); } public class ProductA implements Product { public void use() { System.out.println("Product A"); } } public class ProductB implements Product { public void use() { System.out.println("Product B"); } } public class Factory { public static Product createProduct(String type) { switch(type) { case "A": return new ProductA(); case "B": return new ProductB(); default: throw new IllegalArgumentException("Invalid product type: " + type); } } }
在這個(gè)例子中,我們定義了一個(gè)產(chǎn)品接口Product和兩個(gè)具體產(chǎn)品ProductA和ProductB。而Factory類通過根據(jù)給定的參數(shù)返回不同的產(chǎn)品實(shí)例。由于客戶端代碼從來不直接使用new操作符來創(chuàng)建產(chǎn)品實(shí)例,而是通過一個(gè)工廠類進(jìn)行創(chuàng)建,所以如果我們需要增加一種新的產(chǎn)品實(shí)現(xiàn)ProductC,我們只需要將ProductC類實(shí)現(xiàn)Product接口,并在工廠類中加入一個(gè)相應(yīng)的分支來處理ProductC即可。