Java中,工廠模式是一種常用的設(shè)計(jì)模式。工廠模式可以根據(jù)用戶的需求,創(chuàng)建不同類型的對(duì)象。Java中有兩種常用的工廠模式,分別是簡(jiǎn)單工廠和工廠方法。
簡(jiǎn)單工廠:簡(jiǎn)單工廠也叫靜態(tài)工廠方法模式,它是通過(guò)一個(gè)工廠類來(lái)創(chuàng)建不同類型的對(duì)象,該工廠類通常使用靜態(tài)方法。簡(jiǎn)單工廠的優(yōu)點(diǎn)是簡(jiǎn)單易懂,對(duì)用戶來(lái)說(shuō)十分方便。但是它的缺點(diǎn)也很明顯,這種模式只適用于少量對(duì)象的創(chuàng)建,如果要擴(kuò)展新的對(duì)象類型,需要修改工廠類的代碼。
public class SimpleFactory { public static Product createProduct(String type){ if("A".equals(type)){ return new ConcreteProductA(); }else if("B".equals(type)){ return new ConcreteProductB(); }else{ return null; } } }
工廠方法:工廠方法也叫多形性工廠模式,它是通過(guò)定義一個(gè)抽象工廠類和其子類來(lái)創(chuàng)建不同類型的對(duì)象,每個(gè)子類實(shí)現(xiàn)抽象工廠類中的工廠方法。工廠方法的優(yōu)點(diǎn)是擴(kuò)展性好,可以根據(jù)需要增加新的產(chǎn)品,只需要增加相應(yīng)的子類就可以。但是它的缺點(diǎn)也很明顯,每增加一個(gè)產(chǎn)品,就需要增加一個(gè)對(duì)應(yīng)的工廠子類。
public abstract class Factory { public abstract Product createProduct(); } public class ConcreteFactoryA extends Factory { public Product createProduct() { return new ConcreteProductA(); } } public class ConcreteFactoryB extends Factory { public Product createProduct() { return new ConcreteProductB(); } }
簡(jiǎn)單工廠和工廠方法兩種模式都有各自的優(yōu)點(diǎn)和缺點(diǎn),具體的選擇需要根據(jù)實(shí)際情況來(lái)決定。雖然工廠模式對(duì)于生產(chǎn)對(duì)象這個(gè)簡(jiǎn)單事情有點(diǎn)“為雞蛋老母搬一下磚”的感覺(jué),但是在實(shí)際開(kāi)發(fā)中,工廠模式可以大量減少代碼的重復(fù),提高程序的擴(kuò)展性。