1、定义
多个工厂模式:工厂类中定义多个方法,每个方法对应生成产品
静态工厂模式:工厂类中定义静态方法,每个静态方法对于生成产品;或者定义一个静态方法来生成产品;
2、例子
拿简单工厂模式(1)的例子进行改进,SenderFactory采用多个工厂模式/静态工厂模式的方法
多个工厂模式:
public class SenderFactory {
public Sender createMailSender() {
return new MailSender();
}
public Sender createSmsSender() {
return new SmsSender();
}
public Sender createPushSender() {
return new PushSender();
}
}
public static void main(String[] args) {
SenderFactory factory = new SenderFactory();
Sender sender = factory.createPushSender();
sender.send();
}
静态工厂类(1):
public class SenderFactory {
public static Sender createMailSender() {
return new MailSender();
}
public static Sender createSmsSender() {
return new SmsSender();
}
public static Sender createPushSender() {
return new PushSender();
}
}
public static void main(String[] args) {
Sender sender = SenderFactory.createMailSender();
sender.send();
}
静态工厂类(2)
public class SendFactory {
public final static int MAIL = 1;
public final static int SMS = 2;
public final static int PUSH = 3;
public static Sender createSender(int sendType) {
Sender sender = null;
switch (sendType) {
case SendFactory.MAIL:
sender = new MailSender();
break;
case SendFactory.SMS:
sender = new SmsSender();
break;
case SendFactory.PUSH:
sender = new PushSender();
break;
default:
sender = new MailSender();
break;
}
return sender;
}
}
与简单工厂模式相比,不管多个工厂模式还是静态工厂模式,SenderFactory类中自己添加相应的方法,如果再添加一种发送方式,还需要修改SenderFactory的类, 还是破坏了开闭原则。