工厂模式有个问题就是,类的创建依赖工厂。要想增加一个工厂类,就要修改原来的代码,这违背了闭包原则。所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。
1.工厂类接口
package com.qiao.abstractFactory; public interface Sender { public void send(); }
2.发短信
package com.qiao.abstractFactory; public class SMSSender implements Sender{ public void send() { System.out.println("sms sender "); } }
3.发邮件
package com.qiao.abstractFactory; public class MailSender implements Sender{ public void send() { System.out.println("mail sender "); } }
4.工厂类的提供者接口
package com.qiao.abstractFactory; public interface Provider { public Sender produce(); }
5.短信类的生产工厂
package com.qiao.abstractFactory; public class SMSProduceer implements Provider{ public Sender produce() { return new SMSSender(); } }
6.邮件类的生产工厂
package com.qiao.abstractFactory; public class MailProduceer implements Provider{ public Sender produce() { return new MailSender(); } }
7.调用方法 -- 发短信
@Test public void test1(){ Sender send = new SMSProduceer().produce(); send.send(); }
输出 : sms sender
总结:抽象工厂的好处在于,有新的功能添加时,不需要去改原来的方法,只需要增加两个类即可。这个也就造成了他的缺点,当子类过多时,类的个数也会成倍增加。