Java23種設計模式案例:工廠方法模式(Factory Method)

        工廠方法模式(FACTORY METHOD)是一種經常使用的對象建立型設計模式,此模式的核心精神是封裝類中不變的部分,提取其中個性化善變的部分爲獨立類,經過依賴注入以達到解耦、複用和方便後期維護拓展的目的。它的核心結構有四個角色,分別是抽象工廠;具體工廠;抽象產品;具體產品。java

一、適用場景

        1)對於某個產品,調用者清楚地知道應該使用哪一個具體工廠服務,實例化該具體工廠,生產出具體的產品來。Java Collection中的iterator() 方法即屬於這種狀況。設計模式

        2)只是須要一種產品,而不想知道也不須要知道到底是哪一個工廠爲生產的,即最終選用哪一個具體工廠的決定權在生產者一方,它們根據當前系統的狀況來實例化一個具體的工廠返回給使用者,而這個決策過程這對於使用者來講是透明的。ide

二、優勢

        增長一個運算類(例如N次方類),只須要增長運算類和相對應的工廠,兩個類,不須要修改工廠類。this

三、缺點

  增長運算類,會修改客戶端代碼,工廠方法只是把簡單工廠的內部邏輯判斷移到了客戶端進行。spa

四、代碼示例

    1)關係圖

    2)代碼實現

//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!
相關文章
相關標籤/搜索