美文网首页
工厂方法模式(Factory Method)

工厂方法模式(Factory Method)

作者: 泛光灯 | 来源:发表于2017-06-09 17:45 被阅读0次

工厂方法模式分为三种:

1、普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图:

QQ拼音截图20170609174410.png

举例如下:(我们举一个发送邮件和短信的例子)
首先,创建二者的共同接口:

/**
 * Created by user on 2017/6/9.
 * 创建共同的接口,并暴露Send()方法去实现.
 */
public interface Sender {
    public void Send();
}

其次,创建实现类(这里分别是短信发送者和邮件发送者):

public class SmsSender implements Sender {
    @Override
    public void Send() {
        System.out.println("我是发短信的!!!");
    }
}
public class MailSender implements Sender{
    @Override
    public void Send() {
        System.out.println("我是发邮件的!!");
    }
}

最后,建工厂类:

/*****************************************************
 * 通过工厂的produce()方法来提供工人(发短信和发邮件的),也就是提供实例对象
 */
public class SendFactory {
    public Sender produce(String type) {
        if ("mail".equals(type)) {
            return new MailSender();
        } else if ("sms".equals(type)) {
            return new SmsSender();
        } else {
            System.out.println("请输入正确的类型!");
            return null;
        }
    }
}
QQ拼音截图20170612115308.png

我们来测试下:

public class FactoryTest {
    public static void main(String[] args) {
        SendFactory factory = new SendFactory();//创建一个工厂
        Sender sender = factory.produce("sms");//通过工厂提供发短信的人
        sender.Send();//工人发短信
    }
}

输出 : 我是发短信的!!!

2、多个工厂方法模式,是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。关系图:

QQ拼音截图20170612115308.png
public class SendFactory {
 //    public Sender produce(String type) {
 //        if ("mail".equals(type)) {
 //            return new MailSender();
 //        } else if ("sms".equals(type)) {
 //            return new SmsSender();
 //        } else {
 //            System.out.println("请输入正确的类型!");
 //            return null;
 //        }
 //    }
    public Sender produceMail() {
        return new MailSender();
    }

    public Sender produceSms() {
        return new SmsSender();
    }
}

测试类如下:

public class FactoryTest {
    public static void main(String[] args) {
        SendFactory factory = new SendFactory();//创建一个工厂
//        Sender sender = factory.produce("sms");//通过工厂提供发短信的人
        Sender sender = factory.produceMail();
        sender.Send();//工人发短信
    }
}

相关文章

网友评论

      本文标题:工厂方法模式(Factory Method)

      本文链接:https://www.haomeiwen.com/subject/qsyfqxtx.html