模式描述
工厂方法模式提供一个用于创建产品的接口,由实现类决定实现哪些产品。工厂方法模式使一个类的实例化延迟到子类,并且只适用于一个产品的等级结构。
优点
可以一定程度上解耦,消费者和产品实现类隔离开,只依赖产品接口(抽象产品),产品实现类如何改动与消费者完全无关。
例子
还是以之前简单工厂的手机为案例:
1/** 2 * 产品接口 3 */ 4public interface Phone { 5 public Phone getPhone(); 6} 7 8 9package factory; 10 11/** 12 * 苹果 13 */ 14public class AppleFactory implements Phone { 15 16 @Override 17 public Phone getPhone() { 18 return new AppleFactory(); 19 } 20 21 public String getName() 22 { 23 return "apple"; 24 } 25} 26 27 28package factory; 29 30/** 31 * vivo 32 */ 33public class VivoFactory implements Phone { 34 @Override 35 public Phone getPhone() { 36 return new VivoFactory(); 37 } 38} 39 40 41package factory; 42 43/** 44 * 消费者 45 */ 46public class Coustomer { 47 public static void main(String[] args) { 48 Phone phone = new AppleFactory(); 49 System.out.println(phone.getPhone()); 50 } 51}
和简单工厂区别
1:工厂模式方法(factory method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。
2:工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你想要加功能,本来是要改工厂类的,而现在是修改客户端。