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

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

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

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

23种设计模式(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、多个方法的简单工厂

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

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

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

 

总结:

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

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

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

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

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

上一篇:rabbitmq消息模式


下一篇:Cocos2d-x 3.0final 终结者系列教程16-《微信飞机大战》实现