java设计模式-工厂方法模式
模式描述
工厂方法模式提供一个用于创建产品的接口,由实现类决定实现哪些产品。工厂方法模式使一个类的实例化延迟到子类,并且只适用于一个产品的等级结构。
优点
可以一定程度上解耦,消费者和产品实现类隔离开,只依赖产品接口(抽象产品),产品实现类如何改动与消费者完全无关。
例子
还是以之前简单工厂的手机为案例:
/** * 产品接口 */ public interface Phone { public Phone getPhone(); } package factory; /** * 苹果 */ public class AppleFactory implements Phone { @Override public Phone getPhone() { return new AppleFactory(); } public String getName() { return "apple"; } } package factory; /** * vivo */ public class VivoFactory implements Phone { @Override public Phone getPhone() { return new VivoFactory(); } } package factory; /** * 消费者 */ public class Coustomer { public static void main(String[] args) { Phone phone = new AppleFactory(); System.out.println(phone.getPhone()); } }
和简单工厂区别
1:工厂模式方法(factory method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。
2:工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你想要加功能,本来是要改工厂类的,而现在是修改客户端。