所有设计模式记录都来自于:http://www.cnblogs.com/lwbqqyumidi/p/3750128.html
工厂模式的问题在于:当新定义了一个具有相同特性的类时,需要修改工厂类。这与设计模式中的开闭原则有些违背。因此,通过抽象工厂模式:创建多个工厂类而不是一个工厂类,一旦需要创建新的类对象,只需增加新的工厂类就可以了,不需要修改之前的代码。如此可以较好解决工厂方法模式中的问题。
1. 定义邮件类和短信类具有的共同接口:
与工厂方法模式中定义相同。
2.定义邮件类和短信类:
与工厂方法模式中定义相同。
3.定义不同工厂类所具有的共同接口(既然在需要的时候可以直接创建新的工厂类,那么这些工厂类应该是具有相同的接口的):
interface Provider { public Sender produce(); }
4.定义创建发送邮件工厂类和发送短信工厂类:
class MailFactory implements Provider { @Override public Sender produce() { return new MailSender(); } }
class SmsFactory implements Provider { @Override public Sender produce() { return new SmsSender(); } }
5.测试:
public class Client { public static void main(String[] args) { Provider provider = new MailFactory(); Sender sender = provider.produce(); sender.send(); } }