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();
}
}
测试结果: