天天看點

設計模式——1工廠方法模式(Factory Method)

1、工廠方法模式(Factory Method)

工廠方法模式分為三種:

11、普通工廠模式,就是建立一個工廠類,對實作了同一接口的一些類進行執行個體的建立。

舉例如下:(我們舉一個發送郵件和短信的例子)

首先,建立二者的共同接口:

[java] view plaincopy

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 {

System.out.println("this is sms sender!");

最後,建工廠類:

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;

我們來測試下:

public class FactoryTest {

public static void main(String[] args) {

SendFactory factory = new SendFactory();

Sender sender = factory.produce("sms");

sender.Send();

輸出:this is sms sender!

22、多個工廠方法模式,是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字元串出錯,則不能正确建立對象,而多個工廠方法模式是提供多個工廠方法,分别建立對象。

将上面的代碼做下修改,改動下SendFactory類就行,如下:

[java] view plaincopypublic class SendFactory {

public Sender produceMail(){

public Sender produceSms(){

測試類如下:

Sender sender = factory.produceMail();

輸出:this is mailsender!

33、靜态工廠方法模式,将上面的多個工廠方法模式裡的方法置為靜态的,不需要建立執行個體,直接調用即可。

public static Sender produceMail(){

public static Sender produceSms(){

Sender sender = SendFactory.produceMail();

總體來說,工廠模式适合:凡是出現了大量的産品需要建立,并且具有共同的接口時,可以通過工廠方法模式進行建立。在以上的三種模式中,第一種如果傳入的字元串有誤,不能正确建立對象,第三種相對于第二種,不需要執行個體化工廠類,是以,大多數情況下,我們會選用第三種——靜态工廠方法模式。