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();
}
}
測試結果: