抽象工厂(Abstract Factory)
使用场景:
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
特点:
1,一般是拿抽象工厂与工厂方法做为比较。其中工厂方法如果要添加一个被创建的类,必须的修改工厂类。这违背了设计模式中的开闭原则。
2,抽象工厂与工厂方法类似只是对工厂类进行进一步的抽象,让工厂类实现同一个接口。这样如果添加一个新的产品时,需要新建一个实现工厂接口的实现类。
UML类图:
实现:
/**
* 产品接口
*/
interface Sender {
void send();
}
class MailSender implements Sender {
@Override
public void send() {
System.out.println("mail send method");
}
}
class SmsSender implements Sender{
@Override
public void send() {
System.out.println("sms send method");
}
}
/**
* 工厂接口
*/
public interface Provider {
Sender produce();
}
public class MailFactory implements Provider {
@Override
public Sender produce() {
return new MailSender();
}
}
class SmsFactory implements Provider{
@Override
public Sender produce() {
return new SmsSender();
}
}
public class AbstractFactoryTest {
public static void main(String[] args) {
Provider providerMail = new MailFactory();
Sender senderMail = providerMail.produce();
senderMail.send();
Provider providerSms = new SmsFactory();
Sender senderSms = providerSms.produce();
senderSms.send();
}
}
不足之处请多多指教,谢谢!