設計模式(Design Patterns)工廠方法模式(Factory Method)
工廠方法模式分為三種:
普通工廠模式
建立一個工廠類,對實現了同一介面的一些類進行例項的建立。首先看下關係圖:
舉例如下:(我們舉一個傳送郵件和簡訊的例子)
- 建立介面類
package com.sima.java.factorymethod;
/**
* Created by maple on 2017-08-19.
*/
public interface Sender {
public void send();
}
- 建立實體類
package com.sima.java.factorymethod;
/**
* Created by maple on 2017-08-19.
*/
public class MailSender implements Sender {
public void send() {
System.out.println("send Mail!");
}
}
package com.sima.java.factorymethod;
/**
* Created by maple on 2017-08-19.
*/
public class SmsSender implements Sender {
public void send() {
System.out.println("send SMS!");
}
}
- 建立工廠類
package com.sima.java.factorymethod;
/**
* Created by maple on 2017-08-19.
*/
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;
}
}
}
- 測試
package com.sima.java;
import com.sima.java.factorymethod.SendFactory;
import com.sima.java.factorymethod.Sender;
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
SendFactory sendFactory = new SendFactory();
Sender sender = sendFactory.produce("mail");
sender.send();
sender = sendFactory.produce("sms");
sender.send();
}
}
-
執行結果
多個工廠方法模式
對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,而多個工廠方法模式是提供多個工廠方法,分別建立物件。關係圖:
- 改造工廠類
package com.sima.java.factorymethod;
/**
* Created by maple on 2017-08-19.
*/
public class SendFactoryMore {
public Sender produceMail(){
return new MailSender();
}
public Sender produceMsm(){
return new SmsSender();
}
}
- 測試
package com.sima.java;
import com.sima.java.factorymethod.SendFactory;
import com.sima.java.factorymethod.SendFactoryMore;
import com.sima.java.factorymethod.Sender;
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
SendFactoryMore sendFactoryMore = new SendFactoryMore();
Sender sender = sendFactoryMore.produceMail();
sender.send();
sender = sendFactoryMore.produceMsm();
sender.send();
}
}
- 執行結果
靜態工廠方法模式
將上面的多工廠方法模式裡的方法置為靜態的,不需要建立例項,直接呼叫即可。
- 改造工廠類
package com.sima.java.factorymethod;
/**
* Created by maple on 2017-08-19.
*/
public class SendFactoryMoreStatic {
public static Sender produceMail(){
return new MailSender();
}
public static Sender produceMsm(){
return new SmsSender();
}
}
- 測試
package com.sima.java;
import com.sima.java.factorymethod.SendFactory;
import com.sima.java.factorymethod.SendFactoryMore;
import com.sima.java.factorymethod.SendFactoryMoreStatic;
import com.sima.java.factorymethod.Sender;
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
Sender sender = SendFactoryMoreStatic.produceMail();
sender.send();
sender = SendFactoryMoreStatic.produceMsm();
sender.send();
}
}
- 執行結果
小結
總體來說,工廠模式適合:凡是出現了大量的產品需要建立,並且具有共同的介面時,可以通過工廠方法模式進行建立。在以上的三種模式中,第一種如果傳入的字串有誤,不能正確建立物件,第三種相對於第二種,不需要例項化工廠類,所以,大多數情況下,我們會選用第三種——靜態工廠方法模式。
相關文章
- 設計模式--工廠方法模式(Factory Method Pattern)設計模式
- 設計模式之工廠方法模式(FACTORY METHOD)設計模式
- C#設計模式系列:工廠方法模式(Factory Method)C#設計模式
- JAVA設計模式之 工廠方法模式【Factory Method Pattern】Java設計模式
- 設計模式的征途—3.工廠方法(Factory Method)模式設計模式
- Factory Method 工廠方法模式(建立型模式)模式
- Design Patterns 之工廠模式模式
- 我所理解的設計模式(C++實現)——工廠方法模式(Factory Method Pattern)設計模式C++
- 使用C# (.NET Core) 實現簡單工廠(Simple Factory) 和工廠方法設計模式 (Factory Method Pattern)C#設計模式
- 《設計模式》 - 2. 工廠模式( Factory )設計模式
- 設計模式--工廠模式Factory(建立型)設計模式
- Java設計模式之工廠模式(Factory)Java設計模式
- 設計模式--抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- Scala 與設計模式(四):Factory 工廠模式設計模式
- 設計模式-抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- 設計模式(Design Patterns)筆記之一:Abstract Factory (轉)設計模式筆記
- 設計模式-工廠模式二(工廠方法模式)設計模式
- [Design Pattern With Go]設計模式-工廠模式Go設計模式
- 設計模式之工廠方法模式|抽象工廠模式設計模式抽象
- 設計模式系列之工廠模式三兄弟(Factory Pattern)設計模式
- 設計模式實戰 – 抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- 設計模式實戰 - 抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- JAVA設計模式之 抽象工廠模式【Abstract Factory Pattern】Java設計模式抽象
- 設計模式筆記:簡單工廠模式(Simple Factory)設計模式筆記
- 設計模式 - 工廠方法模式設計模式
- 設計模式-工廠方法模式設計模式
- 設計模式~~~工廠方法模式設計模式
- 設計模式——工廠方法模式設計模式
- 【設計模式】工廠方法模式設計模式
- 設計模式-簡單工廠、工廠方法模式、抽象工廠模式設計模式抽象
- 設計模式、用Delphi描述-->Factory Method模式 (轉)設計模式
- PHP設計模式(一)簡單工廠模式 (Simple Factory For PHP)PHP設計模式
- 【圖解設計模式系列】The Abstract Factory Pattern: 抽象工廠模式圖解設計模式抽象
- 設計模式的征途—4.抽象工廠(Abstract Factory)模式設計模式抽象
- JAVA設計模式之 簡單工廠模式【Simple Factory Pattern】Java設計模式
- java設計模式-工廠方法模式Java設計模式
- 設計模式之工廠方法模式設計模式
- Java設計模式(工廠方法設計模式)Java設計模式