工厂模式
Posted 叶子加雨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工厂模式相关的知识,希望对你有一定的参考价值。
工厂模式的主要作用是创建对象,调用者只需要知道对象名字,通过接口调用对象,不必知道对象是怎么创建的,是典型的解耦模式, 有三种不同类型:简单工厂模式,工厂方法模式和抽象工厂模式。
简单工厂模式:又叫静态工厂方法模式,有三种角色:工厂类角色,抽象产品角色,具体产品角色;下面将引用《head first 设计模式》中的例子去认识简单工厂模式;
首先创建一个抽象产品类,不同的pizza有不同的制作方法,准备的材料,烘烤时间,切片方式,以及装盒都不同,所以首先先创建一个pizza的抽象类
package org.yl; /** * Created by yelei on 17-4-8. */ public abstract class Pizza {
//pizza的制作过程 public abstract void prepare(); public abstract void bake(); public abstract void cut(); public abstract void box(); }
创建两个具体产品类继承Pizza类
VeggiePizza类和CheesePizza类
package org.yl; /** * Created by yelei on 17-4-8. */ public class VeggiePizza extends Pizza { public void prepare(){ System.out.println("准备VeggiePizza"); } public void bake(){ System.out.println("烘烤VeggiePizza"); } public void cut(){ System.out.println("切片VeggiePizza"); } public void box(){ System.out.println("打包VeggiePizza"); } }
package org.yl; /** * Created by yelei on 17-4-8. */ public class CheesePizza extends Pizza { public void prepare(){ System.out.println("准备CheesePizza"); } public void bake(){ System.out.println("烘烤CheesePizza"); } public void cut(){ System.out.println("切片CheesePizza"); } public void box(){ System.out.println("打包CheesePizza"); } }
然后开始创建工厂类:
package org.yl; /** * Created by yelei on 17-4-8. */ //这个工厂类专门用来创建实例 public class PizzaFactory { //定义一个方法,通过这个方法来实例对象,只需要传入相应的参数 public static Pizza createPizza(String type){ Pizza pizza=null; if (type.equals("cheese")){ pizza=new CheesePizza(); }else if (type.equals("veggiePizza")){ pizza=new VeggiePizza(); } return pizza; } }
使用时只需要调用
Pizza pizza=PizzaFactory.createPizza("cheese");
这个静态方法。不用去关心这个对象是如何创建的。但简单工厂模式违背了开闭原则。每增加一种类型的批萨都要在工厂里面去添加。
工厂方法模式:工厂方法模式相对于简单工厂模式,是符合开闭原则,何为开闭原则,就是在新增需求的时候不必修改原有的代码,而是随意增加需要的类。
工厂方法模式有四种角色:抽象工厂角色,具体工厂角色,抽象产品角色,具体产品角色,
以上是关于工厂模式的主要内容,如果未能解决你的问题,请参考以下文章
设计模式简单工厂模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )