23种设计模式(1)---简单工厂模式

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

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();
    }
}

总结:

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

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

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值