首页 > 代码库 > 设计模式之JAVA----工厂模式
设计模式之JAVA----工厂模式
普通工厂模式
定义:建立一个工厂类,对实现了同一接口的一些类进行实例的创建
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(); }
2、接口实现
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"); } }
3、创建工厂方法
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; } } }
4、测试
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(); } }
测试类如同普通工厂类
总结
总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。