前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java设计模式(二)---工厂方法模式

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

作者头像
Ryan-Miao
发布2018-03-13 12:31:49
6160
发布2018-03-13 12:31:49
举报
文章被收录于专栏:Ryan MiaoRyan Miao

2普通工厂方法模式

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

2.1创建接口

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

2.2创建两个实现

代码语言:javascript
复制
 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创建工厂

代码语言:javascript
复制
 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使用测试

代码语言:javascript
复制
/** * 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多个工厂方法模式

代码语言:javascript
复制
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();
    }
}

测试:

代码语言:javascript
复制
package com.test.java.designPattern.factory;

import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.*;

/**
 * Created by mrf on 2016/2/26.
 */
public class MultiSendFacotyTest {
    private MultiSendFacoty facoty;

    @Before
    public void setUp(){
        facoty = new MultiSendFacoty();
    }

    @Test
    public void testProduceMail() throws Exception {
        Sender sender = facoty.produceMail();
        sender.send();

    }

    @Test
    public void testProduceSms() throws Exception {
        Sender sender = facoty.produceSms();
        sender.send();
    }
}

 2.6静态工厂方法模式

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

代码语言:javascript
复制
package com.test.java.designPattern.factory;

import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.*;

/**
 * Created by mrf on 2016/2/26.
 */
public class StaticSendFacotyTest {

    @Test
    public void testProduceMail() throws Exception {
        Sender sender = StaticSendFacoty.produceMail();
        sender.send();
    }

    @Test
    public void testProduceSms() throws Exception {
        Sender sender = StaticSendFacoty.produceSms();
        sender.send();
    }
}

2.7总结:

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2普通工厂方法模式
    • 2.1创建接口
      • 2.2创建两个实现
        • 2.3创建工厂
          • 2.4使用测试
            •  2.5多个工厂方法模式
              •  2.6静态工厂方法模式
                • 2.7总结:
                相关产品与服务
                短信
                腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档