Java设计模式:简单工厂模式

1. 定义

简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

2. 角色

2.1 Factory:工厂角色
工厂角色负责实现创建所有实例的内部逻辑。

2.2 Product:抽象产品角色
抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口

2.3 ConcreteProduct:具体产品角色
具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。

3. 实例

创建一个工厂类,来实现发短信以及发邮件。要发邮件或者发短信的时候,直接调用工厂类,告诉工厂类要做的具体事情,工厂类就能去执行。

抽象产品:

package zzw.cn.factory.simple;

public interface ISender
{
    public void send();
}

具体产品类:

发邮件:

package zzw.cn.factory.simple;

public class MailSender implements ISender
{
    @Override
    public void send()
    {
        System.out.println("This is mail");
    }
}

发短信: 

package zzw.cn.factory.simple;

public class SmsSender implements ISender
{
    @Override
    public void send()
    {
        System.out.println("This is Sms");
    }
}

工厂类:

package zzw.cn.factory.simple;

public class SendFactory
{
    public ISender produce(String type)
    {
        if ("mail".equals(type))
        {
            return new MailSender();
        } else if (type.equals("sms"))
        {
            return new SmsSender();
        } else
        {
            return null;
        }
    }
}

测试类:

package zzw.cn.factory.simple;

public class TestSimpleFactory
{
    public static void main(String[] args)
    {
        SendFactory factory = new SendFactory();
        ISender mail=factory.produce("mail");
        ISender sms = factory.produce("sms");
        mail.send();
        sms.send();
    }
}

 结果:

This is mail
This is Sms

Process finished with exit code 0

从以上的代码可以看出,新增一个产品,就需要创建一个具体产品类,这个产品类要实现抽象产品类。然后,需要在工厂类新增新产品的生产。

4. 优缺点

优点:

通过使用工厂类,外界不再需要知道如何创造各种具体的产品,只要提供一个产品的名称作为参数传给工厂,就可以直接得到一个想要的产品对象,并且可以按照接口规范来调用产品对象的所有方法。

缺点:

在工厂类中,如果产品多了就会有非常多的if else的判断。如果要新增一个新的产品,就要同时添加一个新产品类,并且修改工厂类,继续新加 else if。当产品不断增多的时候,就要不断的修改工厂类,不利于系统的维护和扩展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值