模式定義
定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類允耿,工廠方法使一個類的實例化延遲到其子類。
模式結(jié)構(gòu)
模式結(jié)構(gòu)
代碼實現(xiàn)
public interface Human {
void print();
}
public class Man implements Human {
public void print() {
System.out.println("我是男人");
}
}
public class Woman implements Human {
public void print() {
System.out.println("我是女人");
}
}
public abstract class HumanFactory {
public abstract Human createHuman();
}
public class ManFactory extends HumanFactory {
@Override
public Human createHuman() {
return new Man();
}
}
public class WomanFactory extends HumanFactory {
@Override
public Human createHuman() {
return new Woman();
}
}
public class Client {
public static void main(String[] args) {
HumanFactory manFactory = new ManFactory();
Human man = manFactory.createHuman();
man.print();
}
}
模式的優(yōu)缺點
優(yōu)點
可以在不知道具體的類的情況下編程杉女。
在系統(tǒng)增加新的產(chǎn)品時壹哺,只需要添加一個具體產(chǎn)品類和對應的實現(xiàn)工廠,無需對原工廠進行任何修改窜锯,很好地符合了“開閉原則”张肾。
缺點
具體產(chǎn)品對象和工廠方法耦合性。
思考
模式本質(zhì):延遲到子類選擇實現(xiàn)锚扎。
開發(fā)中的應用場景
如果一個類需要創(chuàng)建某個接口的對象吞瞪,但是又不知道具體的實現(xiàn),這種情況可以選用工廠方法模式驾孔,
把創(chuàng)建對象的工作延遲到子類中去實現(xiàn)芍秆。如果一個類本身就希望由它的子類來創(chuàng)建所需的對象的時候惯疙,應該使用工廠方法模式。