工厂方法模式(创建型)

来源:互联网 发布:计算机与网络杂志 编辑:程序博客网 时间:2024/06/05 09:54
工厂方法模式
定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例延迟到其子类。

 适用性

    1.当一个类不知道它所必须创建的对象的类的时候。
    2.当一个类希望由它的子类来指定它所创建的对象的时候。
    3.当将创建对象的职责委托给多个帮助类中的某一个,并且希望将哪一个帮助子类是代理者这一信息局部化的时候。
结构类图
headfirst结构类图
-----------------------------------------------------------------------------------------
系统结构图
------------------------------------------------------------------------------------
抽象产品类
---------------------------------------------------------------
public class Pizza {protected String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public void prepare() {System.out.println("prepare");}public void bake() {System.out.println("bake");}public void box() {System.out.println("box");}public void print() {System.out.println(name);}}
----------------------------
抽象创建者类
------------------------------
public abstract class PizzaStore {   public Pizza orderPizza(String type){Pizza pizza;pizza=createPizza(type);pizza.prepare();pizza.bake();pizza.box();return pizza;}protected abstract Pizza createPizza(String type);}
----------------------------------------------
具体的产品
-------------------------------------------
public class ChicagoChessPizz extends Pizza {   public ChicagoChessPizz(){   this.name="ChicagoChessPizz";   }}public class ChicagoClamPizza extends Pizza {public ChicagoClamPizza() {this.name = "ChicagoClamPizza";}}public class NYChessPizza extends Pizza {    public NYChessPizza(){    this.name="NYChessPizza";    }}public class NYClamPizza extends Pizza{public NYClamPizza(){this.name="NYClamPizza";}}
----------------------------------------
具体创建者类
---------------------------------------
public class ChicagoPizzaStore extends PizzaStore{Pizza pizza=null;@Overrideprotected Pizza createPizza(String type) {// TODO Auto-generated method stubif(type.equals("chess")){pizza=new ChicagoChessPizz();}else if(type.equals("clam")){pizza=new ChicagoClamPizza();}return pizza;}}public class NYPizzaStore extends PizzaStore{Pizza pizza=null;@Overrideprotected Pizza createPizza(String type) {// TODO Auto-generated method stubif(type.equals("chess")){pizza=new NYChessPizza();}else if(type.equals("clam")){pizza=new NYClamPizza();}return pizza;}}

----------------------------------------------------
测试类
----------------------------------------------------
public class TestClass {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubPizzaStore pizzaStore1 = new ChicagoPizzaStore();PizzaStore pizzaStore2 = new NYPizzaStore();System.out.println("==================");System.out.println("ChicagoPizzaStore");Pizza pizza1 = pizzaStore1.orderPizza("chess");pizza1.print();Pizza pizza2 = pizzaStore1.orderPizza("clam");pizza2.print();System.out.println("==================");System.out.println("NYPizzaStore");Pizza pizza3 = pizzaStore2.orderPizza("chess");pizza3.print();Pizza pizza4 = pizzaStore2.orderPizza("clam");pizza4.print();System.out.println("==================");}}

---------------------------------------------------------------
结果
==================ChicagoPizzaStorepreparebakeboxChicagoChessPizzpreparebakeboxChicagoClamPizza==================NYPizzaStorepreparebakeboxNYChessPizzapreparebakeboxNYClamPizza==================
0 0
原创粉丝点击