工厂方法模式(FACTORY METHOD)是一种经常使用的对象建立型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,经过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品。java
1)对于某个产品,调用者清楚地知道应该使用哪一个具体工厂服务,实例化该具体工厂,生产出具体的产品来。Java Collection中的iterator() 方法即属于这种状况。设计模式
2)只是须要一种产品,而不想知道也不须要知道到底是哪一个工厂为生产的,即最终选用哪一个具体工厂的决定权在生产者一方,它们根据当前系统的状况来实例化一个具体的工厂返回给使用者,而这个决策过程这对于使用者来讲是透明的。ide
增长一个运算类(例如N次方类),只须要增长运算类和相对应的工厂,两个类,不须要修改工厂类。this
增长运算类,会修改客户端代码,工厂方法只是把简单工厂的内部逻辑判断移到了客户端进行。spa
//1.须要各个终端共同实现的接口 public interface Sender { public void Send(); } //2.终端1:MailSender public class MailSender implements Sender { @Override public void Send() { System.out.println("this is mailsender!"); } } //3.终端2:SmsSender public class SmsSender implements Sender { @Override public void Send() { System.out.println("this is sms sender!"); } } //4.须要各个终端工厂类共同实现的接口 public interface Provider { public Sender produce(); } //5.工厂类1 public class SendMailFactory implements Provider { @Override public Sender produce(){ return new MailSender(); } } //6.工厂类2 public class SendSmsFactory implements Provider{ @Override public Sender produce() { return new SmsSender(); } } //7.使用方法 public class Test { public static void main(String[] args) { Provider provider = new SendMailFactory(); Sender sender = provider.produce(); sender.Send(); } } 输出结果:this is mailsender!