JAVA設(shè)計模式系列:
定義
簡單工廠模式又叫做靜態(tài)工廠方法模式扩氢,是常用的實例化對象模式。
角色
工廠類:工廠類包含了負(fù)責(zé)創(chuàng)建所有實例具體邏輯蚂维;可以直接被外界調(diào)用來創(chuàng)建所需要的對象。
抽象產(chǎn)品類:工廠類所創(chuàng)建對象的父類。
具體產(chǎn)品類:工廠類創(chuàng)建的具體對象。
實現(xiàn)
這里簡單寫一個示例來實現(xiàn)普通工廠模式沉帮。
類圖

抽象產(chǎn)品類
public interface IFruit {
void get();
}
定義了一個抽象水果類IFruit
,其中包含一個get()
贫堰。
具體產(chǎn)品類
public class Apple implements IFruit {
@Override
public void get() {
System.out.println("I am a apple.");
}
}
public class Orange implements IFruit {
@Override
public void get() {
System.out.println("I am a orange." );
}
}
定義了2個具體水果類Apple
遇西、Orange
分別實現(xiàn)了IFruit
的get()
方法。
工廠類
public class FruitFactory {
public static IFruit getFruit(String type) {
IFruit ifruit = null;
if ("apple".equals(type)) {
ifruit = new Apple();
} else if ("orange".equals(type)) {
ifruit = new Orange();
}
return ifruit;
}
}
工廠類包含一個靜態(tài)方法getFruit()
,功能是:根據(jù)不同的type
返回不同的水果實例严嗜。
測試
public static void main(String[] args) {
IFruit apple = FruitFactory.getFruit("apple");
IFruit orange = FruitFactory.getFruit("orange");
apple.get();
orange.get();
}
分別調(diào)用水果工廠FruitFactory
類來實例化2個不同的水果實例。運行結(jié)果:
I am a apple.
I am a orange.
總結(jié)
優(yōu)點:可以隱藏具體類名稱洲敢,提供參數(shù)給使用者直接調(diào)用漫玄;避免直接實例化對象,無需準(zhǔn)備構(gòu)造函數(shù)參數(shù)压彭。
缺點:在增加新產(chǎn)品的時候睦优,必須修改工廠類,違背了開放封閉原則壮不。