工厂方法模式
(Factory Method)
摘自:http://blog.csdn.net/zhangerqing/article/details/8194653
工厂方法模式分为三种:
1.1 普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。关系图如下:
举例如下:(一个发邮件和短信的例子)
首先,创建二者的共同接口:
public interface Sender {
void send();
}
创建实体类:
public class MailSender implements Sender{
@Override
public void send() {
System.out.println("this is mail sender");
}
}
public class SmsSender implements Sender {
@Override
public void send() {
System.out.println("this is sms sender");
}
}
最后创建工厂类:(用的java7 String 类型支持 switch 语法)
public class SenderFactory {
public Sender produce(String type) {
switch (type) {
case "mail":
return new MailSender();
case "sms":
return new SmsSender();
default:
System.out.println("请输入 正确的类型");
return null;
}
}
}
最后测试一下:
public class Main {
public static void main(String[] args) {
SenderFactory factory = new SenderFactory();
Sender sender = factory.produce("mail");
sender.send();
}
}
1.2 多个工厂方法模式:
是对普通工厂方法的模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确的创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象;关系图如下:
只需将上面的工厂类修改一下 就行,如下:
public class SenderFactory {
public Sender produceMailSender(){
return new MailSender();
}
public Sender produceSmsSender(){
return new SmsSender();
}
}
测试一下:
public class Main {
public static void main(String[] args) {
SenderFactory factory = new SenderFactory();
Sender sender = factory.produceMailSender();
sender.send();
}
}
1.3 静态工厂方法模式
将上面的多个工厂方法模式里的方法置为静态,不需要创建实例,直接调用即可。
public class SenderFactory {
public static Sender produceMailSender() {
return new MailSender();
}
public static Sender produceSmsSender() {
return new SmsSender();
}
}
测试一下:
public class Main {
public static void main(String[] args) {
Sender sender = SenderFactory.produceMailSender();
sender.send();
}
}