java设计模式(二)---工厂方法模式-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

java设计模式(二)---工厂方法模式

简介:

2普通工厂方法模式

就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。

2.1创建接口

复制代码
1 /**
2  * 发送接口
3  * Created by mrf on 2016/2/25.
4  */
5 public interface Sender {
6     public String send();
7 }
复制代码

2.2创建两个实现

复制代码
 1 /**
 2  * 邮件发送
 3  * Created by mrf on 2016/2/25.
 4  */
 5 public class MailSender implements Sender {
 6     @Override
 7     public String send() {
 8         System.out.println("This is emailSender!");
return "email";
9 } 10 } 11 12 /** 13 * 短信发送 14 * Created by mrf on 2016/2/25. 15 */ 16 public class SmsSender implements Sender { 17 @Override 18 public String send() { 19 System.out.println("This is SmsSender!!");return "sms"; 20 } 21 }
复制代码

2.3创建工厂

复制代码
 1 /**
 2  * 发送工厂
 3  * Created by mrf on 2016/2/25.
 4  */
 5 public class SendFactory {
 6 
 7     public Sender produce(String type){
 8         if("email".equals(type)){
 9             return new MailSender();
10         }
11         if ("sms".equals(type)){
12             return new SmsSender();
13         }
14         System.out.println("输入类型不正确!");
15         return null;
16     }
17 }
复制代码

2.4使用测试

复制代码
/** * Created by mrf on 2016/2/25 */
public
class SendFactoryTest { protected long startTime; protected long endTime; @Before public void setUp() throws Exception { this.startTime= System.currentTimeMillis(); System.out.println("=========开始测试==========="); } @After public void tearDown() throws Exception { this.endTime = System.currentTimeMillis(); System.out.println("测试用时:"+(endTime-startTime)); System.out.println("=========测试结束==========="); } @Test public void testProduce() throws Exception { SendFactory sendFactory = new SendFactory(); Sender sender = sendFactory.produce("email");
String send = sender.send();
assertEquals("email",send);
} }
复制代码

 2.5多个工厂方法模式

复制代码
package com.test.java.designPattern.factory;

/**
 * 多个工厂模式
 * <p>
 *     是对普通工厂方法模式的改进。因为普通方法模式中key错误则不能正确创建对象,
 *     多个工厂模式提供多个创建方法。
 * </p>
 * Created by mrf on 2016/2/26.
 */
public class MultiSendFacoty {

    public Sender produceMail(){
        return  new MailSender();
    }

    public Sender produceSms(){
        return  new SmsSender();
    }
}
复制代码

测试:

 View Code

 2.6静态工厂方法模式

将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。

 View Code

2.7总结:

总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。




本文转自Ryan.Miao博客园博客,原文链接:http://www.cnblogs.com/woshimrf/p/5217742.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章