工厂模式分为三类:
1)简单工厂模式(Simple Factory)
2)工厂方法模式(Factory Method)
3)抽象工厂模式(Abstract Factory)
可以将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例。
下面以发送邮件和发送短信为例实现这三种模式
简单工厂模式:
又称静态工厂方法模式,定义一个用于创建对象的接口。
接口类
public interface Sender {
void send();
}
两个实现类
public class SmsSender implements Sender {
public void send() {
System.out.println("this is sms sender!");
}
}
public class MailSender implements Sender {
public void send() {
System.out.println("this is mailsender!");
}
}
工厂类
public class SendFactory {
public static Sender produce(String type) {
if ("mail".equals(type)) {
return new MailSender();
} else if ("sms".equals(type)) {
return new SmsSender();
} else {
System.out.println("请输入正确的类型!");
return null;
}
}
}
测试方法
Sender sender = SendFactory.produce("sms");
sender.send();
工厂方法模式:
简单工厂模式只有一个工厂类产生产品,如果产品增加,需要修改工厂类的produce方法。
工厂方法模式提供多个工厂方法,分别创建对象。
修改工厂类
public class SendFactory {
public static Sender produceMail(){
return new MailSender();
}
public static Sender produceSms(){
return new SmsSender();
}
}
测试代码
Sender sender = SendFactory.produceSms();
sender.send();
抽象工厂模式:
增加工厂接口
public interface Provider {
Sender produce();
}
两个工厂实现类
public class SendSmsFactory implements Provider {
public Sender produce() {
return new SmsSender();
}
}
public class SendMailFactory implements Provider {
public Sender produce() {
return new MailSender();
}
}
测试代码
Provider provider = new SendMailFactory();
Sender sender = provider.produce();
sender.send();
如果你现在想增加一个功能:发QQ信息,则只需做一个实现类,实现Sender接口,同时做一个工厂类,实现Provider接口,无需去改动现成的代码。