工廠方法模式(FACTORY METHOD)是一種經常使用的對象建立型設計模式,此模式的核心精神是封裝類中不變的部分,提取其中個性化善變的部分爲獨立類,經過依賴注入以達到解耦、複用和方便後期維護拓展的目的。它的核心結構有四個角色,分別是抽象工廠;具體工廠;抽象產品;具體產品。java
1)對於某個產品,調用者清楚地知道應該使用哪一個具體工廠服務,實例化該具體工廠,生產出具體的產品來。Java Collection中的iterator() 方法即屬於這種狀況。設計模式
2)只是須要一種產品,而不想知道也不須要知道到底是哪一個工廠爲生產的,即最終選用哪一個具體工廠的決定權在生產者一方,它們根據當前系統的狀況來實例化一個具體的工廠返回給使用者,而這個決策過程這對於使用者來講是透明的。ide
增長一個運算類(例如N次方類),只須要增長運算類和相對應的工廠,兩個類,不須要修改工廠類。this
增長運算類,會修改客戶端代碼,工廠方法只是把簡單工廠的內部邏輯判斷移到了客戶端進行。spa
//1.須要各個終端共同實現的接口 public interface Sender { public void Send(); } //2.終端1:MailSender public class MailSender implements Sender { @Override public void Send() { System.out.println("this is mailsender!"); } } //3.終端2:SmsSender public class SmsSender implements Sender { @Override public void Send() { System.out.println("this is sms sender!"); } } //4.須要各個終端工廠類共同實現的接口 public interface Provider { public Sender produce(); } //5.工廠類1 public class SendMailFactory implements Provider { @Override public Sender produce(){ return new MailSender(); } } //6.工廠類2 public class SendSmsFactory implements Provider{ @Override public Sender produce() { return new SmsSender(); } } //7.使用方法 public class Test { public static void main(String[] args) { Provider provider = new SendMailFactory(); Sender sender = provider.produce(); sender.Send(); } } 輸出結果:this is mailsender!