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

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

与简单工厂模式的对比

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

UML类图

Java设计模式-工厂方法模式_第1张图片

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设计模式-单例模式

你可能感兴趣的:(Java设计模式-工厂方法模式)