1、定义
简单工厂模式:一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
类图如下:
2、例子
举个例子:用户提交了业务单据后,发送消息通知给相应处理人,消息通知方式有短信、邮件、push通知等。
类图定义如下:
(1)定义Sender接口
public interface Sender {
public void send();
}
(2)实现邮件发送类
public class MailSender implements Sender {
@Override
public void send() {
System.out.println("发送邮件");
}
}
(3)实现短信发送类
public class SmsSender implements Sender {
@Override
public void send() {
System.out.println("发送短信");
}
}
(4)实现PUSH发送类
public class PushSender implements Sender {
@Override
public void send() {
System.out.println("发送Push");
}
}
(5)创建发送工厂类
public class SendFactory {
public final static int MAIL = 1;
public final static int SMS = 2;
public final static int PUSH = 3;
public 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;
}
}
(6)我们做一个测试类
public class Test {
public static void main(String[] args) {
SendFactory factory = new SendFactory();
Sender sender = factory.createSender(SendFactory.PUSH);
sender.send();
}
}
优势
在简单工厂模式中,工厂类是整个模式的关键,其包含必要的判断逻辑,能够根据外界给定的信息,决定究竟创建哪个类的实例,外界可以不用去关注对象的创建,仅需要负责“消费”对象就可以了,明确区分了责任,有利于结构的优化。
劣势:
简单工厂模式的缺点也体现在其工厂类上,该类集中了所有实例的创建逻辑,违反了高内聚的责任分配原则,当系统的具体产品类不断增多时,工厂类中条件判断过多,不利于扩展及维护,简单工厂模式的这些缺点,利用工厂方法模式可以得到一定的克服。