工厂模式
来源:互联网 发布:kyocera打印机驱动mac 编辑:程序博客网 时间:2024/06/05 04:07
工厂模式:定义了创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推送到子类。
下面我们以订披萨为例,通过不同的披萨工厂来生产各种口味的披萨。
1. 工厂基类
public abstract class PizzaFactory { public Pizza orderPizza(String type){ Pizza pizza = createPizza(type); pizza.prepare(); pizza.bake(); pizza.box(); return pizza; } abstract Pizza createPizza(String type);}
2. 工厂派生类
public class NYStylePizzaFactory extends PizzaFactory{ @Override Pizza createPizza(String type) { if("cheese".equals(type)){ return new NYStyleCheesePizza(); }else if("veggie".equals(type)){ return new NYStyleVeggiePizza(); } return null; }}public class ChicagoStylePizzaFactory extends PizzaFactory{ @Override Pizza createPizza(String type) { if("cheese".equals(type)){ return new ChicagoStyleCheesePizza(); }else if("veggie".equals(type)){ return new ChicagoStyleVeggiePizza(); } return null; }}
4. 披萨基类
public class Pizza { public void prepare(){ System.out.println("prepare..."); } public void bake(){ System.out.println("bake..."); } public void box(){ System.out.println("box..."); }}
5. 披萨派生类
public class ChicagoStyleCheesePizza extends Pizza{ public ChicagoStyleCheesePizza() { System.out.println("Create ChicagoStyleCheesePizza..."); }}public class ChicagoStyleVeggiePizza extends Pizza{ public ChicagoStyleVeggiePizza() { System.out.println("Create ChicagoStyleVeggiePizza..."); }}public class NYStyleCheesePizza extends Pizza{ public NYStyleCheesePizza(){ System.out.println("Create NYStyleCheesePizza..."); }}public class NYStyleVeggiePizza extends Pizza{ public NYStyleVeggiePizza(){ System.out.println("Create NYStyleVeggiePizza..."); }}
6. 测试
public class FactoryTest { public static void main(String[] args) { PizzaFactory nyStylePizzaFactory = new NYStylePizzaFactory(); PizzaFactory chicagoStylePizzaFactory = new ChicagoStylePizzaFactory(); nyStylePizzaFactory.orderPizza("cheese"); System.out.println("---------------------------------"); chicagoStylePizzaFactory.orderPizza("veggie"); }}
7. 运行结果
Create NYStyleCheesePizza...prepare...bake...box...---------------------------------Create ChicagoStyleVeggiePizza...prepare...bake...box...
阅读全文
0 0
- 工厂模式 -- 工厂方法
- 工厂模式 -- 抽象工厂
- 工厂模式-简单工厂
- 工厂模式-工厂方法
- 工厂模式:静态工厂
- 工厂模式-简单工厂
- 工厂模式-抽象工厂
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-静态工厂
- 工厂模式-抽象工厂
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 匿名方法、lambda
- Python基础教程(2)列表和元组
- 【UVA1169】Robotruck
- HDU 4343 Interval query
- Samba服务器创建与使用
- 工厂模式
- MySQL备注不熟悉的DML|DDL 语句
- React Native 开发适配心得
- Android 设计模式之代理模式
- 洛谷 P2170 选学霸
- C++入门基础知识
- I
- bzoj 4517: [Sdoi2016]排列计数
- 使用Python WSGI编写Web服务器前端,并利用Boost.Python在同一进程内连接到C++服务后端实现