图片来自head first 设计模式,仅供学习之用
一直没有体会到工厂方法的实际意义,因为我对工厂方法的理解还不够,就是没有实际写过代码,因为平时写代码都是直接new,体会不到工厂方法模式的作用。
当代码使用大量的具体类时,需要考虑工厂方法模式了。
head first 里的依赖倒置原则我不是很懂
首先关于工厂有三个模式,分别是简单工厂模式,工厂方法模式,抽象工厂模式,我把这三个概念混淆了,把工厂方法当成简单工厂,把抽象工厂当成工厂方法= =(貌似我经常犯这种张冠李戴的错误。。)可怜的简单工厂模式被我给忽略了。
简单工厂模式
public class SimplePizzaFactory { public Pizza createPizza(String type){ Pizza pizza=null; if(type.equals("cheese")){ pizza=new CheesePizza(); } else if(type.equals("greek")){ pizza=new GreekPizza(); } else if (type.equals("pepperoni")){ pizza=new PepperoniPizza(); } return pizza; } }
直接提取产生对象的代码到一个工厂类中: ) 几乎不能定制
工厂方法模式
public abstract class PizzaStore { public Pizza orderPizza(String type){ Pizza pizza=null; pizza=createPizza(type); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } protected abstract Pizza createPizza(String type);//披萨实例化的责任移动到一个方法中,这个方法就如同一个工厂 }
工厂方法模式是通过子类实现,所以产品和工厂都是抽象的。
工厂方法的情景是多种产品,多种工厂,达到的效果是可以很方便的增加或删除工厂和产品。