標籤:
Factory 方法模式有一個問題就是,類的建立依賴工廠類,也就是說,如果想要拓展程式,必須對工廠類進行修改,這違背了閉包原則,所以,從設計角度考慮,有一定的問題,如何解決?就用到抽象原廠模式,建立多個工廠類,這樣一旦需要增加新的功能,直接增加新的工廠類就可以了,不需要修改之前的代碼。
為工廠類做一個統一的父類介面,可用於擴充
因為抽象工廠不太好理解,先看看圖,然後就和代碼,就比較容易理解。
例子:
public interface Sender { public void Send(); }
兩個實作類別
public class MailSender implements Sender { @Override public void Send() { System.out.println("this is mailsender!"); } }
public class SmsSender implements Sender { @Override public void Send() { System.out.println("this is sms sender!"); } }
提供一個工廠父類介面:
public interface Provider { public Sender produce(); }
兩個工廠類:
public class SendMailFactory implements Provider { @Override public Sender produce(){ return new MailSender(); } }
public class SendSmsFactory implements Provider{ @Override public Sender produce() { return new SmsSender(); } }
測試類別:
public class Test { public static void main(String[] args) { Provider provider = new SendMailFactory(); Sender sender = provider.produce(); sender.Send(); } }
其實這個模式的好處就是,如果你現在想增加一個功能:發及時資訊,則只需做一個實作類別,實現Sender介面,同時做一個工廠類,實現Provider介面,就OK了,無需去改動現成的代碼。這樣做,拓展性較好!
Java設計模式-抽象原廠模式(Abstract Factory )