博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
23种设计模式(1)---简单工厂模式
阅读量:4087 次
发布时间:2019-05-25

本文共 2728 字,大约阅读时间需要 9 分钟。

简单工厂模式分为三种:普通简单工厂、多方法简单工厂、静态方法简单工厂

1、普通简单工厂模式:建立一个工厂类,对实现了同一接口的一些类进行实例的创建。

如下:发送邮件和短信实现类,有一个发送短信的接口

第1步、创建发送短信和发送邮件的接口Sender

package com.cn.factory.sender.impl;/** * 发送邮件接口 * */public interface Sender {    //发送邮件方法    public void send();}

第2步、创建发送短信和发送邮件的实现类,实现Sender接口

1)、发送短信实现类SmsSender

package com.cn.factory.sender;import com.cn.factory.sender.impl.Sender;/** * 短信发送实现类 * */public class SmsSender implements Sender {    /**     * 发送短信的方法     * */    @Override    public void send() {        System.out.println("这是发送短信的方法");    }}

2)、发送邮件实现类MailSender

package com.cn.factory.sender;import com.cn.factory.sender.impl.Sender;/** * 邮件发送实现类 * */public class EmailSender implements Sender {    @Override    public void send() {        System.out.println("这是发送邮件的方法");    }}

第3步、建立工厂类SendFactory

package com.cn.factory.sender;import com.cn.factory.sender.impl.Sender;/** * 简单工厂类 * */public class SendFactory {    /**     * 生产方法     * */    public Sender produce(String type){        if("mail".equals(type)){            return new EmailSender();        }else if("sms".equals(type)){            return new SmsSender();        }else{            System.out.println("请输入正确的类型!");            return null;        }    }}

第4步、测试

package com.cn.factory.sender.test;import com.cn.factory.sender.SendFactory;import com.cn.factory.sender.impl.Sender;public class FactoryTest {    public static void main(String[] args) {        //实例化一个发送类工厂        SendFactory factory=new SendFactory();        //通过工厂类生产相应的发送类型        Sender sender=factory.produce("sms");        sender.send();    }}

 

2、多个方法的简单工厂

普通工厂方法,如果传递的字符串出现错误,则不能正确的创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象

第1步、改造SendFactory类,代码如下:

package com.cn.factory.sender;import com.cn.factory.sender.impl.Sender;/** * 简单工厂类 * */public class SendFactory {  public Sender produceMail(){      return new EmailSender();  }  public Sender produceSms(){      return new SmsSender();  }}

第2步、测试

package com.cn.factory.sender.test;import com.cn.factory.sender.SendFactory;import com.cn.factory.sender.impl.Sender;public class FactoryTest {    public static void main(String[] args) {        SendFactory factory=new SendFactory();        Sender sender=factory.produceMail();        sender.send();    }}

 

3、静态方法的简单工厂

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

第1步、对SendFactory方法进行改造,如下:

package com.cn.factory.sender.test;import com.cn.factory.sender.SendFactory;import com.cn.factory.sender.impl.Sender;public class FactoryTest {    public static void main(String[] args) {        Sender sender=SendFactory.produceMail();        sender.send();    }}

 

总结:

工厂模式适合:凡是出现了大量的产品需要创建,并且这些产品都具有共同的接口时,可以通过工厂方法模式进行创建。

简单工厂:如果传入的字符串有误,则不能正确创建对象。

多方法简单工厂:在工厂类中提供多个方法,分别创建对象

静态多方法简单工厂:不需要实例化工厂类,避免实例化对象占用存储空间和开销

大多数情况下,一般推荐使用静态工厂方法模式

转载地址:http://kmuii.baihongyu.com/

你可能感兴趣的文章
前端设计之CSS布局:上中下三栏自适应高度CSS布局
查看>>
Java的时间操作玩法实例若干
查看>>
JavaScript:时间日期格式验证大全
查看>>
pinyin4j:拼音与汉字的转换实例
查看>>
XML工具代码:SAX从String字符串XML内获取指定节点或属性的值
查看>>
时间日期:获取两个日期相差几天
查看>>
责任链模式 Chain of Responsibility
查看>>
高并发与大数据解决方案概述
查看>>
解决SimpleDateFormat线程安全问题NumberFormatException: multiple points
查看>>
MySQL数据库存储引擎简介
查看>>
处理Maven本地仓库.lastUpdated文件
查看>>
Kafka | 请求是怎么被处理的?
查看>>
Java并发编程1-线程池
查看>>
CentOS7,玩转samba服务,基于身份验证的共享
查看>>
计算机网络-网络协议模型
查看>>
计算机网络-OSI各层概述
查看>>
Java--String/StringBuffer/StringBuilder区别
查看>>
mySQL--深入理解事务隔离级别
查看>>
分布式之redis复习精讲
查看>>
数据结构与算法7-栈
查看>>