前言
该模式属于创建对象的模式,适用于实现统一接口的一些对象的创建工作,用统一的接口管理,方便好维护,避免了出现大量的new 代码。
具体分为三种类型: 普通方法工厂模式、多个工厂方法模式和静态方法工厂模式。
普通方法工厂模式
再工厂类定义一个方法,根据传入参数的不同,选择创建对象的类型。
定义一个发送信息的接口
public interface Sender {
public void send();
}
定义发送短信类
public class SendMsg implements Sender {
@Override
public void send() {
System.out.println("发送一条短信,收到了吗?");
}
}
定义发送邮件类
public class SendEmail implements Sender {
@Override
public void send() {
System.out.println("发送电子邮件,请查收");
}
}
定义工厂类
public class SenderFactory {
public Sender produceSender(String str){
if("msg".equals(str)){
return new SendMsg();
}else if("Email".equals(str)){
return new SendEmail();
}else {
System.out.println("类型不匹配");
return null;
}
}
}
测试
public class Test {
public static void main(String[] args) {
SenderFactory senderFactory = new SenderFactory();
Sender sender = senderFactory.produceSender("msg");
sender.send();
}
}
结果
发送一条短信,收到了吗?
多个工厂方法模式
再普通的改进下,不传入参数,而是写多个方法,避免参数错误的情况。
代码
public class SenderFactory {
public SenderFactory() {
}
public Sender produceSenderMsg(){
return new SendMsg();
}
public Sender produceSenderEmail(){
return new SendEmail();
}
}
测试
public class Test {
public static void main(String[] args) {
SenderFactory senderFactory = new SenderFactory();
Sender sender = senderFactory.produceSenderEmail();
sender.send();
}
}
静态方法工厂模式
再上面的基础上,将方法改成静态的,不用再new 工厂对象了,这个是三个里边最好的。
public class SenderFactory {
public SenderFactory() {
}
public static Sender produceSenderMsg(){
return new SendMsg();
}
public static Sender produceSenderEmail(){
return new SendEmail();
}
}
测试
public class Test {
public static void main(String[] args) {
Sender sender = SenderFactory.produceSenderEmail();
sender.send();
}
}