模式定義
定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類,工廠方法使一個(gè)類的實(shí)例化延遲到其子類。
模式結(jié)構(gòu)

模式結(jié)構(gòu)
代碼實(shí)現(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)缺點(diǎn)
優(yōu)點(diǎn)
可以在不知道具體的類的情況下編程。
在系統(tǒng)增加新的產(chǎn)品時(shí),只需要添加一個(gè)具體產(chǎn)品類和對(duì)應(yīng)的實(shí)現(xiàn)工廠,無需對(duì)原工廠進(jìn)行任何修改,很好地符合了“開閉原則”。
缺點(diǎn)
具體產(chǎn)品對(duì)象和工廠方法耦合性。
思考
模式本質(zhì):延遲到子類選擇實(shí)現(xiàn)。
開發(fā)中的應(yīng)用場景
如果一個(gè)類需要?jiǎng)?chuàng)建某個(gè)接口的對(duì)象,但是又不知道具體的實(shí)現(xiàn),這種情況可以選用工廠方法模式,
把創(chuàng)建對(duì)象的工作延遲到子類中去實(shí)現(xiàn)。如果一個(gè)類本身就希望由它的子類來創(chuàng)建所需的對(duì)象的時(shí)候,應(yīng)該使用工廠方法模式。