Version: Next
简单工厂模式
源发问题
每当扩展新产品时,都需要对客户端程序做修改,以适应新产品。
解决方案
简单工厂模式由一个工厂对象决定创建出哪一种产品类的实例
定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)
工厂模式想要 -> 一个集中new对象的地方,一个集中实例化对象的地方
客户端直接找工厂要新产品,将添加新产品的代码转移到简单工厂里做
当要用到大量的创建某种、某类或某批对象时,就会用到简单工厂模式
UML类图
代码
- 需求:订购披萨
- 披萨的种类很多(GreekPizz、 CheesePizz等)
- 披萨的制作流程有
prepare
,bake
,cut
,box
- 完成披萨店订购功能
思路
把创建Pizza对象封装到一个类中,当有新的Pizza种类时,只需要修改该类就行了,其他创建Pizza对象的代码就不需要修改了
创建工厂类
SimpleFactory
,所有的OrderPizza
直接找工厂要披萨
- 有一个披萨店
PizzaStore
,它可以为客人订指定类型的披萨orderPizza(String type)
方法,在Pizza
被做出来之前,Pizza
都是抽象的,不知道时肉松披萨还是希腊披萨
StaticSimplePizzaFactory
(当成SimplePizzaFactory就行了,只是方法改成了静态的)可以生产披萨static Pizza createPizza(String type)
方法,根据String type
生产具体的Pizza(继承抽象类Pizza
的具体披萨类)
测试调用
PizzaStore store = new PizzaStore();store.orderPizza("cheese")
今后出现新的披萨品种的时候,只需要修改StaticSimpleFactory
而不需要修改PizzaStore(Client客户端)的代码