Java设计模式-工厂方法模式

上一篇:Java设计模式-简单工厂模式

与简单工厂模式的对比

在简单工厂模式中,每当我们添加了新的功能(例如例子中的Sender类),我们就要为这个类添加一段新的逻辑代码或者工厂函数。这违背了开放封闭原则(对扩展开放,对修改封闭)。工厂方法模式的提出就是为了解决这个问题。
工厂方法模式,定义一个用户创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类(相比于简单工厂方法)。也就是说工厂方法模式实现时,客户端需要决定实例化哪一个工厂来获得实例,选择判断的问题依然存在,只是将内部逻辑判断移到了客户端代码来进行。

UML类图

FactoryMethodTest.java

package factory;

public class FactoryMethodTest
{
    public static void main(String[] args)
    {
        SenderFactory emailSenderFactory = new EmailSenderFactory();
        Sender sender = emailSenderFactory.createSender();
        sender.send();
        SMSSenderFactory smsSenderFactory = new SMSSenderFactory();
        sender = smsSenderFactory.createSender();
        sender.send();
    }

}

interface Sender
{
    public void send();
}

class EmailSender implements Sender
{
    @Override 
    public void send()
    {
        System.out.println(getClass().getName() + " send");
    }
}

class SMSSender implements Sender
{
    @Override
    public void send()
    {
        System.out.println(getClass().getName() + " send");
    }
}

interface SenderFactory
{
    public Sender createSender();
}

class SMSSenderFactory implements SenderFactory
{
    @Override
    public Sender createSender()
    {
        return new SMSSender();
    }
}

class EmailSenderFactory implements SenderFactory
{
    @Override
    public Sender createSender()
    {
        return new EmailSender();
    }
}

下一篇:Java设计模式-单例模式

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容