1,定义抽象产品类

  1. package com.pattern.factory;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. public abstract class Pizza {
  6. String name;
  7. String dough;
  8. String sauce;
  9. ArrayList toppings = new ArrayList();
  10.  
  11. void prepare(){
  12. System.out.println("Prepareing "+name);
  13. System.out.println("Tossing dough...");
  14. System.out.println("Adding sauce...");
  15. System.out.println("Adding toppings: ");
  16. for(int i=0;i<toppings.size();i++){
  17. System.out.println(" "+toppings.get(i));
  18. }
  19. }
  20.  
  21. void bake(){
  22. System.out.println("Bake for 25 minutes at 350");
  23. }
  24.  
  25. void cut(){
  26. System.out.println("Cutting the pizza into diagonal slices");
  27. }
  28.  
  29. void box(){
  30. System.out.println("Place pizza in official PizzaStore box");
  31. }
  32.  
  33. public String getName(){
  34. return name;
  35. }
  36. }

2,具体产品类

  1. package com.pattern.factory;
  2. public class ChicagoStyleCheesePizza extends Pizza {
  3.   public ChicagoStyleCheesePizza(){
  4.   name = "Chicago Style Deep Dish Cheese Pizza";
  5.   dough = "Extra Thick Crust Dough";
  6.   sauce = "Plum Tomato Sauce";
  7.   
  8.   toppings.add("Shredded Mozzarella Cheese");
  9.  }
  10.  
  11.  void cut(){
  12.   System.out.println("Cutting the pizza into square slices");
  13.  }
  14. }
  1. package com.pattern.factory;
  2.  
  3. public class NYStyleCheesePizza extends Pizza {
  4.  
  5. public NYStyleCheesePizza(){
  6. name = "NY Style Sauce and Cheese Pizza";
  7. dough = "Thin Crust Dough";
  8. sauce = "Marinara Sauce";
  9.  
  10. toppings.add("Grated Reggiano Cheese");
  11. }
  12. }

3,定义抽象工厂类

  1. package com.pattern.factory;
  2.  
  3. public abstract class PizzaStore {
  4.  
  5. public Pizza orderPizza(String type){
  6. Pizza pizza ;
  7. pizza = createPizza(type);
  8. pizza.prepare();
  9. pizza.bake();
  10. pizza.cut();
  11. pizza.box();
  12.  
  13. return pizza;
  14. }
  15.  
  16. protected abstract Pizza createPizza(String type) ;
  17.  
  18. }

4,定义具体工厂类

  1. package com.pattern.factory;
  2.  
  3. import com.pattern.factory.bean.ChicagoStyleClamPizza;
  4. import com.pattern.factory.bean.ChicagoStylePepperoniPizza;
  5. import com.pattern.factory.bean.ChicagoStyleVeggiePizza;
  6.  
  7. public class ChicagoPizzaStore extends PizzaStore {
  8.  
  9. /**
  10. * @see com.pattern.factory.PizzaStore#createPizza(java.lang.String)
  11. */
  12. @Override
  13. protected Pizza createPizza(String type) {
  14. if(type.equals("cheese")){
  15. return new ChicagoStyleCheesePizza();
  16. } else if(type.equals("veggie")){
  17. return new ChicagoStyleVeggiePizza();
  18. } else if(type.equals("clam")){
  19. return new ChicagoStyleClamPizza();
  20. } else if(type.equals("pepperoni")){
  21. return new ChicagoStylePepperoniPizza();
  22. } else {
  23. return null;
  24. }
  25. }
  26.  
  27. }
  1. package com.pattern.factory;
  2.  
  3. import com.pattern.factory.bean.NYStyleClamPizza;
  4. import com.pattern.factory.bean.NYStylePepperoniPizza;
  5. import com.pattern.factory.bean.NYStyleVeggiePizza;
  6.  
  7. public class NYPizzaStore extends PizzaStore {
  8.  
  9. /**
  10. * @see com.pattern.factory.PizzaStore#createPizza(java.lang.String)
  11. */
  12. @Override
  13. protected Pizza createPizza(String type) {
  14. if(type.equals("cheese")){
  15. return new NYStyleCheesePizza();
  16. } else if(type.equals("veggie")){
  17. return new NYStyleVeggiePizza();
  18. } else if(type.equals("clam")){
  19. return new NYStyleClamPizza();
  20. } else if(type.equals("pepperoni")){
  21. return new NYStylePepperoniPizza();
  22. } else {
  23. return null;
  24. }
  25. }
  26.  
  27. }

5,测试类

  1. package com.pattern.factory;
  2.  
  3. public class PizzaTestDrive {
  4.  
  5. public static void main(String[] args) {
  6. PizzaStore nyStore = new NYPizzaStore();
  7. PizzaStore chicagoStore = new ChicagoPizzaStore();
  8.  
  9. Pizza pizza = nyStore.orderPizza("cheese");
  10. System.out.println("Ethan ordered a "+pizza.getName()+"\n");
  11.  
  12. pizza = chicagoStore.orderPizza("cheese");
  13. System.out.println("Joel order a "+ pizza.getName()+"\n");
  14. }
  15. }

测试结果:

Prepareing NY Style Sauce and Cheese Pizza

Tossing dough...

Adding sauce...

Adding toppings:

 Grated Reggiano Cheese

Bake for 25 minutes at 350

Cutting the pizza into diagonal slices

Place pizza in official PizzaStore box

Ethan ordered a NY Style Sauce and Cheese Pizza

Prepareing Chicago Style Deep Dish Cheese Pizza

Tossing dough...

Adding sauce...

Adding toppings:

 Shredded Mozzarella Cheese

Bake for 25 minutes at 350

Cutting the pizza into square slices

Place pizza in official PizzaStore box

Joel order a Chicago Style Deep Dish Cheese Pizza

类图如下所示:

Java设计模式(五) 工厂模式的更多相关文章

  1. java设计模式2————工厂模式

    1.工厂模式介绍: 1.1.实现了创建者与调用者的分离 1.2.详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 1.3.所遵循的OOP原则: 开闭原则:对扩展开放,对修改关闭 依赖倒转原则:面向 ...

  2. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

  3. Java设计模式之工厂模式(Factory模式)介绍(转载)

    原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工 ...

  4. Java 设计模式之工厂模式(二)

    原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...

  5. 浅析JAVA设计模式之工厂模式(二)

    1 工厂方法模式简单介绍 工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic Factory),在这样的模式中,核心工厂不再是一个详细的类.而是一个抽象工厂,提 ...

  6. java 设计模式之工厂模式与反射的结合

    工厂模式: /**  * @author Rollen-Holt 设计模式之 工厂模式  */   interface fruit{     public abstract void eat(); } ...

  7. Java设计模式之-----工厂模式(简单工厂,抽象工厂)

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...

  8. Java设计模式之工厂模式(简单工厂模式+工厂方法模式)

    摘自http://blog.csdn.net/jason0539/article/details/23020989 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是 ...

  9. Java 设计模式之工厂模式

    工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻 ...

  10. JAVA设计模式--抽象工厂模式

    抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...

随机推荐

  1. 【一周读书】All life is problem solving

    书籍:<开放的智力> 采铜是我在知乎关注最早的大V之一,那时我脑里有一大堆疑惑和问题,是他的答案帮助我理清了思绪.我从他身上学习到对书籍的爱好,对思维方法的关注,对智慧的向往.读这本小集子 ...

  2. 第28章 行为型模式大PK

    27.1 策略模式 VS 命令模式 27.1.1 策略模式实现压缩算法 //行为型模式大PK——策略模式和命令模式 //实例:用策略模式实现压缩算法 #include <iostream> ...

  3. AC日记——密码翻译 openjudge 1.7 09

    09:密码翻译 总时间限制:  1000ms 内存限制:  65536kB 描述 在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报被破译,但仍 ...

  4. CSS中的常用属性

    一 CSS文字属性:color : #999999; /*文字颜色*/font-family : 宋体,sans-serif; /*文字字体*/font-size : 9pt; /*文字大小*/fon ...

  5. file文件的操作

    <?php //echo readfile('D:\\123.txt');//读取文件内容第一种方式,返回字符串,但是带有长度 echo '<br>'; //var_dump(fil ...

  6. 转:[版本控管]TortoiseSVN 使用,抓出兇手,使用 Blame 查看每一行最後修改的人是誰

    类似的官方的使用手段有: https://tortoisesvn.net/docs/nightly/TortoiseSVN_zh_CN/tsvn-dug-blame.html from: http:/ ...

  7. webpack.optimize.CommonsChunkPlugin插件的使用

    方式一,传入字符串参数 new webpack.optimize.CommonsChunkPlugin('common.js'), // 默认会把所有入口节点的公共代码提取出来,生成一个common. ...

  8. [转]PHP 下使用 ZeroMQ 和 protobuf

    FROM : http://www.68idc.cn/help/makewebs/php/20150118175432.html 前言 这个记录总的来说分两部分: 搭建环境. 简单使用教程. 搭建环境 ...

  9. java中wait/notify机制

    通常,多线程之间需要协调工作.例如,浏览器的一个显示图片的线程displayThread想要执行显示图片的任务,必须等待下载线程 downloadThread将该图片下载完毕.如果图片还没有下载完,d ...

  10. Linux 网络编程详解六(多进程服务器僵尸进程解决方案)

    小结:在点对点p2p程序中,服务器端子程序退出,子进程会主动发送信号,关闭父进程,但是这种模式导致服务器只能支持一个客户端连接,本章节中使用新的框架,子进程退出,不主动发送信号关闭父进程,而是父进程安 ...