Java-工厂设计模式
Java工厂设计模式
一、关于工厂设计模式
介绍:设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,
并且是通过使用一个共同的接口来指向新创建的对象。
意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
主要解决:主要解决接口选择的问题。
何时使用:我们明确地计划不同条件下创建不同实例时。
如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。
分类:普通简单工厂、多个方法的简单工厂、多个静态方法的简单工厂、工厂设计模式。
二、代码实现
简单工厂:就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图
举例如下:(我们举一个发送邮件和短信的例子)
首先,创建二者的共同接口:
Sender
package pers.hupo.hupow.factory; /** * @author hupo * 创建一个接口 * */ public interface Sender { void Send(); }
其次,创建实现类:
MailSender
package pers.hupo.hupow.factory; /** * @author hupo * Sender实现类 * */ public class MailSender implements Sender { @Override public void Send() { System.out.println("this mail message"); } }
SmsSender
package pers.hupo.hupow.factory; /** * @author hupo * Sender实现类 * */ public class SmsSender implements Sender { @Override public void Send() { System.out.println("this sms message"); } }
最后,建工厂类:
package pers.hupo.hupow.factory; /** * @author hupo * 工厂类 * */ public class SendFactory { public Sender produce(String type) { if ("mail".equals(type)) { return new MailSender(); } if ("sms".equals(type)) { return new SmsSender(); } return null; } }
测试方法
package pers.hupo.hupow.factory; public class FactoryTest { public static void main(String[] args) { SendFactory sendFactory = new SendFactory(); Sender sender = sendFactory.produce("sms"); sender.Send(); } }
输出结果: