Java簡單工廠模式

        簡單工廠模式是工廠模式家族中最簡單實用的模式,能夠理解爲是不一樣工廠模式的一個特殊實現。該模式不屬於23種GOF設計模式。簡單工廠通常分爲:普通簡單工廠、多方法簡單工廠、靜態方法簡單工廠。java

一、適用場景

    1)工廠類負責建立的對象比較少;設計模式

    2)客戶只知道傳入工廠類的參數,對於如何建立對象(邏輯)不關心;ide

    3)因爲簡單工廠很容易違反高內聚責任分配原則,所以通常只在很簡單的狀況下應用。測試

二、優勢

        工廠類是整個模式的關鍵.包含了必要的邏輯判斷,根據外界給定的信息,決定究竟應該建立哪一個具體類的對象.經過使用工廠類,外界能夠從直接建立具體產品對象的尷尬局面擺脫出來,僅僅須要負責「消費」對象就能夠了。而沒必要管這些對象究竟如何建立及如何組織的.明確了各自的職責和權利,有利於整個軟件體系結構的優化。優化

三、缺點

        因爲工廠類集中了全部實例的建立邏輯,違反了高內聚責任分配原則,將所有建立邏輯集中到了一個工廠類中;它所能建立的類只能是事先考慮到的,若是須要添加新的類,則就須要改變工廠類了。
        當系統中的具體產品類不斷增多時候,可能會出現要求工廠類根據不一樣條件建立不一樣實例的需求.這種對條件的判斷和對具體產品類型的判斷交錯在一塊兒,很難避免模塊功能的蔓延,對系統的維護和擴展很是不利。this

四、代碼示例

        1)簡單工廠模式

            a.關係圖

            b.代碼實現

//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 class SendFactory {  
  
    public Sender produce(String type) {  
        if ("mail".equals(type)) {  
            return new MailSender();  
        } else if ("sms".equals(type)) {  
            return new SmsSender();  
        } else {  
            System.out.println("請輸入正確的類型!");  
            return null;  
        }  
    }  
} 

//5.使用方法
public class FactoryTest {  
  
    public static void main(String[] args) {  
        SendFactory factory = new SendFactory();  
        Sender sender = factory.produce("sms");  
        sender.Send();  
    }  
} 

輸出結果:this is sms sender!

        2)多方法簡單工廠

        是對普通工廠方法模式的改進,在普通工廠方法模式中,若是傳遞的字符串出錯,則不能正確建立對象,而多個工廠方法模式是提供多個工廠方法,分別建立對象。spa

            a.關係圖

           

            b.代碼實現

//對以上簡單工廠類作簡單修改
public class SendFactory {  
   public Sender produceMail(){  
        return new MailSender();  
    }  
      
    public Sender produceSms(){  
        return new SmsSender();  
    }  
} 


//測試方法
public class FactoryTest {  
  
    public static void main(String[] args) {  
        SendFactory factory = new SendFactory();  
        Sender sender = factory.produceMail();  
        sender.Send();  
    }  
} 

輸出結果:this is mailsender!

        3)靜態方法簡單工廠

                a.關係圖

                同多方法簡單工廠關係圖。設計

                b.代碼實現

//將上面的多個工廠方法模式裏的方法置爲靜態的,不須要建立實例,直接調用
public class SendFactory {  
      
    public static Sender produceMail(){  
        return new MailSender();  
    }  
      
    public static Sender produceSms(){  
        return new SmsSender();  
    }  
} 

//測試方法
public class FactoryTest {  
  
    public static void main(String[] args) {      
        Sender sender = SendFactory.produceMail();  
        sender.Send();  
    }  
} 

輸出結果:this is mailsender!
相關文章
相關標籤/搜索