定义
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码
工厂类接口
package com.hongshu.abstact.factory;
import com.hongshu.factory.ordinary.dao.Sender;
/**
* Description:
* @since
* @author HongShu
* @version 1.0.0
* 2014年7月30日 下午2:10:08
*/
public interface Provider {
public Sender produce();
}
工厂类实现
package com.hongshu.abstact.factory;
import com.hongshu.factory.ordinary.dao.MailSender;
import com.hongshu.factory.ordinary.dao.Sender;
/**
* Description:抽象工厂模式
* @since
* @author HongShu
* @version 1.0.0
* 2014年7月30日 下午2:09:34
*/
public class SendMailFactory implements Provider {
@Override
public Sender produce() {
// TODO Auto-generated method stub
return new MailSender();
}
}
工厂类实现
package com.hongshu.abstact.factory;
import com.hongshu.factory.ordinary.dao.Sender;
import com.hongshu.factory.ordinary.dao.SmsSender;
/**
* Description:
* @since
* @author HongShu
* @version 1.0.0
* 2014年7月30日 下午2:11:48
*/
public class SendSmsFactory implements Provider {
@Override
public Sender produce() {
// TODO Auto-generated method stub
return new SmsSender();
}
}
测试类
package com.hongshu.abstact.factory;
import com.hongshu.factory.ordinary.dao.Sender;
/**
* Description:抽象工厂模式测试类
* 工厂方法模式有一个问题就是,类的创建依赖工厂类,
* 也就是说,如果想要拓展程序,必须对工厂类进行修改,
* 这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?
* 就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,
* 直接增加新的工厂类就可以了,不需要修改之前的代码
* @since
* @author HongShu
* @version 1.0.0
* 2014年7月30日 下午2:12:11
*/
public class Test {
public static void main(String[] args) {
Provider provider = new SendSmsFactory();
Sender sender = provider.produce();
sender.send();
}
}
说明:其中用到Sender, MailSender 、SmsSender请对照 设计模式之JAVA----工厂模式