定义:建立一个工厂类,对实现了同一接口的一些类进行实例的创建
1、创建接口
package com.hongshu.factory.ordinary.dao; /** * Description: 发送接口 * @since * @author HongShu * @version 1.0.0 * 2014年7月30日 上午11:14:17 */ public interface Sender { public void send(); }
package com.hongshu.factory.ordinary.dao; /** * Description:发送接口实现 * @since * @author HongShu * @version 1.0.0 * 2014年7月30日 上午11:16:11 */ public class MailSender implements Sender { @Override public void send() { System.out.println("mial have successed!"); } }
package com.hongshu.factory.ordinary.dao; /** * Description: * @since * @author HongShu * @version 1.0.0 * 2014年7月30日 上午11:17:09 */ public class SmsSender implements Sender { @Override public void send() { System.out.println("Sms have successed"); } }
package com.hongshu.factory.ordinary; import com.hongshu.factory.ordinary.dao.MailSender; 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日 上午11:12:46 */ public class OrdinaryFactory { public Sender produce(String type){ if("mail".equalsIgnoreCase(type)) return new MailSender(); else if("sms".equalsIgnoreCase(type)) return new SmsSender(); else { System.out.println("没有对应的工厂实现类"); return null; } } }
package com.hongshu.factory.ordinary; import com.hongshu.factory.ordinary.dao.Sender; /** * Description: * @since * @author HongShu * @version 1.0.0 * 2014年7月30日 上午11:21:47 */ public class Test { public static void main(String[] args) { OrdinaryFactory factory = new OrdinaryFactory(); Sender sender = factory.produce("sms"); sender.send(); sender = factory.produce("mail"); sender.send(); } }
定义:是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象
package com.hongshu.factory.more; import com.hongshu.factory.ordinary.dao.MailSender; 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日 下午1:38:55 */ public class MoreFactory { public Sender produceMail(){ return new MailSender(); } public Sender produceSms(){ return new SmsSender(); } }
定义:将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可
package com.hongshu.factory.staticf; import com.hongshu.factory.ordinary.dao.MailSender; 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日 下午1:43:44 */ public class StaticFactory { public static Sender produceMail(){ return new MailSender(); } public static Sender produceSms(){ return new SmsSender(); } }
测试类如同普通工厂类
总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。
设计模式之JAVA----工厂模式,布布扣,bubuko.com
原文:http://blog.csdn.net/wgzhl2008/article/details/38295839