JAVA工廠方法模式(Factory Method)


1.普通工廠模式

普通工廠模式:就是建立一個工廠類,對實現了同一接口的一些類進行實例的創建。

1-1.建立Sender接口

public interface Sender {
public void send();
}

1-2 創建實現類實現Sender接口,比如文本與圖像以及視頻類

文本類

public class TextSender implements Sender {
public void send() {
System.out.println("this is Textsender!");
}
}

圖像類

public class ImageSender implements Sender {
public void send() {
System.out.println("this is Imagessender!");
}
}

視頻類

public class VideoSender implements Sender {
public void send() {
System.out.println("this is Imagessender!");
}
}

1-3建立工廠類

public class SendFactory {
public Sender produce(String type) {
if ("mail".equals(type)) {
return new TextSender();
}
else if ("sms".equals(type)) {
return new ImageSender();
}
else if ("video".equals(type)) {
return new VideoSender();
}
else {
System.out.println("請輸入正確的類型!");
return null;
}
}
}

 1-4 普通的工廠模式設計已經完成了。下面在main中測試下

public class Main {

public static void main(String[] args) {
SendFactory factory = new SendFactory();
Sender text=factory.produce("text");
text.send();
Sender image=factory.produce("image");
image.send();
Sender video=factory.produce("video");
video.send();

}

}

測試結果截圖:

但是這種普通工廠方式一旦參數不正確不會產生對象。為了改進這個方式便有了多工廠方法,一個方法產生對應的一個對象,通過調用方法來產生對象

2-1多工廠模式

只要改變1-3中的工廠類即可。

public class SendFactory {
public static Sender produceText(){
return new TextSender();
}
public static Sender produceImage(){
return new ImageSender();
}
public static Sender produceVideo(){
return new VideoSender();
}
}

在main中測試

2-2

public class Main {

public static void main(String[] args) {
SendFactory factory = new SendFactory();
Sender text = factory.produceText();
text.send();
Sender image = factory.produceImage();
image.send();
Sender video = factory.produceVideo();
video.send();

}

}

測試結果如下圖

3。上面例子要是有新的類產生要去更改工廠類,不利於維護,對於這樣的情況我們可以采用抽象工廠模式。

還是用上面的作為例子。

3-1.建立Sender接口

public interface Sender {
public void send();
}

3-2 創建實現類實現Sender接口,比如文本與圖像以及視頻類

文本類

public class TextSender implements Sender {
public void send() {
System.out.println("this is Textsender!"); 
}
}

圖像類

public class ImageSender implements Sender {
public void send() {
System.out.println("this is Imagessender!"); 
}
}

視頻類

public class VideoSender implements Sender {
public void send() {
System.out.println("this is Imagessender!"); 
}
}

3-3提供一個接口讓工廠類來實現這邊我用offer接口

public interface Offer {

public Sender offer();  

}

3-4 對應類由對應工廠來生產

public class TextSenderFactory implements Offer {

public Sender offer() {

return new TextSender();

}

}

public class ImageSenderFactory implements Offer {

 

public Sender offer() {

return new ImageSender();

}

 

}

public class VideoSenderFactory implements Offer {

 

public Sender offer() {

return new VideoSender() ;

}

}

3-5.已經完成了去main中測試下

public class Main {

 

public static void main(String[] args) {

   Offer textoffer=new TextSenderFactory();

   Sender text=textoffer.offer();

   text.send();

   Offer imageoffer=new ImageSenderFactory();

   Sender image=imageoffer.offer();

   image.send();

}

 

}

測試結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM