2.FactoryMethod-工廠方法模式

Factory Method 工廠方法模式

  • 工廠方法模式:

    1. 核心,定義一個創建對象的接口/抽象類,讓子類來決定實例化哪一個類,使實例化延遲到子類。
      當有新的產品產生時,只要按照產品接口和工廠接口來生成,就可以被客戶端使用,而不必改碼.
      所以工廠方法模式是完全符合開閉原則的。
    2. 工廠方法克服了簡單工廠違背開放封閉原則的缺點,又保持了封裝對象創建過程的優點。
      降低了客戶程序和產品對象之間的耦合。
  • 示例類圖:
    FactoryMethod_uml

  • 示例代碼:

// 產品
public interface Sender {
    public void send(String msg);
}

//具體產品
public class MailSender implements Sender {
    @Override
    public void send(String msg) {
        System.out.println("MailSender send : " + msg);
    }
}
public class SmsSender implements Sender {
    @Override
    public void send(String msg) {
        System.out.println("SmsSender  send : " + msg);
    }
}

// 定義一個創建對象的接口,讓子類來決定實例化哪一個類,使實例化延遲到子類。
public interface SenderFactory {
    public Sender getSender();
}

//具體工廠(每個具體工廠負責一個具體產品)
public class MailSenderFactory implements SenderFactory {

    @Override
    public Sender getSender() {
        return new SmsSender();
    }

}
public class SmsSenderFactory implements SenderFactory{

    @Override
    public Sender getSender() {
        return new MailSender();
    }

}

// 測試
public class FactoryTest {

    public static void main(String[] args) {
        FactoryMethod();
    }

    // 工廠方法模式測試
    public static void FactoryMethod() {
        SenderFactory senderFactory = new MailSenderFactory();
        Sender sender = senderFactory.getSender();
        sender.send("MailSenderFactory");

        new SmsSenderFactory().getSender().send("SmsSenderFactory");
    }

}

工廠方法是簡單工廠的進一步抽象和推廣,由於使用了多態性,所以每增加一個產品就要增加一個對應的產品工廠類,增加了額外的開發量。
當產品種類非常多時,就會出現大量的與之對應的工廠類,使用簡單工廠模式與工廠方法模式相結合的方式可以減少工廠類:
即對於產品樹上類似的種類(一般是樹的葉子中互爲兄弟的)使用簡單工廠模式來實現。

發佈了38 篇原創文章 · 獲贊 7 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章