工厂方法模式(创建型)
来源:互联网 发布:计算机与网络杂志 编辑:程序博客网 时间: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
- 创建型模式-工厂方法
- 创建型模式-工厂方法
- 创建型--工厂方法模式
- 工厂方法模式(创建型)
- 创建型模式--工厂方法
- 设计模式-创建型模式-工厂方法
- 认识创建型模式---工厂方法模式
- 创建型模式之工厂方法模式
- 【设计模式】创建型模式-工厂方法
- 工厂方法模式(创建型模式)
- 创建型模式--工厂方法模式
- 创建型模式之工厂方法模式
- 创建型模式之工厂方法模式
- 创建型模式之工厂方法模式
- 工厂方法模式-创建型模式
- 创建型模式—工厂方法模式
- Factory Method工厂方法(创建型模式)
- 创建型模式之工厂方法
- 21骰子数独(12)
- Transform
- Scrum敏捷开发简介
- 小心seo服务商的甜言蜜语!
- KNN分类与回归-C++实现
- 工厂方法模式(创建型)
- golang简单的Server Client模型
- linux下make工具使用系列5
- HTML5-俄罗斯方块
- Pentest - PowerShell and Token Impersonation
- Angular之依赖注入(injector)与原生View组件
- 杂花生树(十一)
- Android MVP模式简单例子实战
- 跨平台APP----对Native/Hybrid/Web APP三种开发模式的分析(系列一)