`
wangpx
  • 浏览: 202339 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

工厂方法 读书笔记

阅读更多
工厂发法定义了一个创建对象的接口或者抽象类,但是有子类来决定要实例化的类是哪一个,工厂方法让类把实例化 推迟到子类。

package pattern;
import java.util.ArrayList;
public abstract class PizzaStore {
 SimplePizzaFactory factory;
 public PizzaStore() {
 }
 public PizzaStore(SimplePizzaFactory factory) {
  this.factory = factory;
 }
 public Pizza orderPizza(String type) {
  Pizza pizza;
  pizza = createPizza(type);
  pizza.prepare();
  pizza.bake();
  pizza.cut();
  pizza.box();
  return pizza;
 }
 abstract Pizza createPizza(String type);
}
class NYPizzaStore extends PizzaStore {
 Pizza createPizza(String item) {
  if (item.equals("cheese")) {
   return new NYStyleCheesePizza();
  } else if (item.equals("pepperoni")) {
   return new NYStylePepperoniPizza();
  } else if (item.equals("clam")) {
   return new NYStyleClamPizza();
  } else if (item.equals("veggie")) {
   return new NYStyleVeggiePizza();
  } else
   return null;
 }
}
class ChicagoPizzaStore extends PizzaStore {
 Pizza createPizza(String item) {
  if (item.equals("cheese")) {
   return new ChicagoStyleCheesePizza();
  } else if (item.equals("pepperoni")) {
   return new ChicagoStylePepperoniPizza();
  } else if (item.equals("clam")) {
   return new ChicagoStyleClamPizz();
  } else if (item.equals("veggie")) {
   return new ChicagoStyleVeggiePizza();
  } else
   return null;
 }
}
class CaliforniaPizzaStore extends PizzaStore {
 Pizza createPizza(String item) {
  if (item.equals("cheese")) {
   return new CaliforniaStyleCheesePizza();
  } else if (item.equals("pepperoni")) {
   return new CaliforniaStylePepperoniPizza();
  } else if (item.equals("clam")) {
   return new CaliforniaStyleClamPizza();
  } else if (item.equals("veggie")) {
   return new CaliforniaStyleVeggiePizza();
  } else
   return null;
 }
}
abstract class Pizza {
 String name;
 String dough;
 String sauce;
 ArrayList toppings = new ArrayList();
 public void prepare() {
  System.out.println("Preparing" + name);
  System.out.println("Tossing dough...");
  System.out.println("Adding sauce...");
  System.out.println("Adding toppings: ");
  for (int i = 0; i < toppings.size(); i++) {
   System.out.println("   " + toppings.get(i));
  }
 }
 public void bake() {
  System.out.println("Bake for 25 minutes at 350");
 }
 public void cut() {
  System.out.println("Cutting the pizza into diagonal slices");
 }
 public void box() {
  System.out.println("Place pizza in official PizzaStore box");
 }
 public String getName() {
  return name;
 }
}
class CheesePizza extends Pizza {
 public CheesePizza() {
  System.out.println("Cheesepizza");
 }
}
class NYStyleCheesePizza extends Pizza {
 public NYStyleCheesePizza() {
  name = "NY Style sauce and Cheese Pizza";
  dough = "Thin Crust Dough";
  sauce = "Marinara Sauce";
  toppings.add("Grated Reggiano Cheese");
 }
}
class ChicagoStyleCheesePizza extends Pizza {
 public ChicagoStyleCheesePizza() {
  name = "Chicago StyleDeep Dish Cheese Pizza";
  dough = "Extra Thick Crust Dough";
  sauce = "Plum Tomato Sauce";
  toppings.add("Shredded Mozzarella Cheese");
 }
 public void cut() {
  System.out.println("Cutting the pizza into square slices");
 }
}
class CaliforniaStyleCheesePizza extends Pizza {
 public CaliforniaStyleCheesePizza() {
  name = "California Style sauce and Cheese Pizza";
  dough = "Thin Crust Dough";
  sauce = "Marinara Sauce";
  toppings.add("Grated California Cheese");
 }
}
class PepperoniPizza extends Pizza {
 public PepperoniPizza() {
  System.out.println("PepperoniPizza");
 }
}
class NYStylePepperoniPizza extends Pizza {
 public NYStylePepperoniPizza() {
  name = "NY Style sauce and Cheese Pizza";
  dough = "Thin Crust Dough";
  sauce = "Marinara Sauce";
  toppings.add("Grated Pepperoni Cheese");
 }
}
class ChicagoStylePepperoniPizza extends Pizza {
 public ChicagoStylePepperoniPizza() {
  name = "Chicago StyleDeep Dish Cheese Pizza";
  dough = "Extra Thick Crust Dough";
  sauce = "Plum Tomato Sauce";
  toppings.add("Shredded Pepperoni Cheese");
 }
 public void cut() {
  System.out.println("Cutting the pizza into square slices");
 }
}
class CaliforniaStylePepperoniPizza extends Pizza {
 public CaliforniaStylePepperoniPizza() {
  name = "California Style sauce and Cheese Pizza";
  dough = "Thin Crust Dough";
  sauce = "Marinara Sauce";
  toppings.add("Grated Pepperoni Cheese");
 }
}
class ClamPizza extends Pizza {
 public ClamPizza() {
  System.out.println("ClamPizza");
 }
}
class NYStyleClamPizza extends Pizza {
 public NYStyleClamPizza() {
  name = "NY Style sauce and Cheese Pizza";
  dough = "Thin Crust Dough";
  sauce = "Marinara Sauce";
  toppings.add("Grated ClamPizza Cheese");
 }
}
class ChicagoStyleClamPizz extends Pizza {
 public ChicagoStyleClamPizz() {
  name = "Chicago StyleDeep Dish Cheese Pizza";
  dough = "Extra Thick Crust Dough";
  sauce = "Plum Tomato Sauce";
  toppings.add("Shredded Clam Cheese");
 }
 public void cut() {
  System.out.println("Cutting the pizza into square slices");
 }
}
class CaliforniaStyleClamPizza extends Pizza {
 public CaliforniaStyleClamPizza() {
  name = "California Style sauce and Cheese Pizza";
  dough = "Thin Crust Dough";
  sauce = "Marinara Sauce";
  toppings.add("Grated Clam Cheese");
 }
}
class VeggiePizza extends Pizza {
 public VeggiePizza() {
  System.out.println("VeggiePizza");
 }
}
class NYStyleVeggiePizza extends Pizza {
 public NYStyleVeggiePizza() {
  name = "NY Style sauce and Cheese Pizza";
  dough = "Thin Crust Dough";
  sauce = "Marinara Sauce";
  toppings.add("Grated VeggiePizza Cheese");
 }
}
class ChicagoStyleVeggiePizza extends Pizza {
 public ChicagoStyleVeggiePizza() {
  name = "Chicago StyleDeep Dish Cheese Pizza";
  dough = "Extra Thick Crust Dough";
  sauce = "Plum Tomato Sauce";
  toppings.add("Shredded Veggie Cheese");
 }
 public void cut() {
  System.out.println("Cutting the pizza into square slices");
 }
}
class CaliforniaStyleVeggiePizza extends Pizza {
 public CaliforniaStyleVeggiePizza() {
  name = "California Style sauce and Cheese Pizza";
  dough = "Thin Crust Dough";
  sauce = "Marinara Sauce";
  toppings.add("Grated Veggie Cheese");
 }
}
 
 
public class PizzaTestDrive {
 public static void main(String[] args) {
  PizzaStore nyStore = new NYPizzaStore();
  PizzaStore chicagoStore = new ChicagoPizzaStore();
  Pizza pizza = nyStore.orderPizza("cheese");
  System.out.println("Ethan ordered a " + pizza.getName() + "\n");
  pizza = chicagoStore.orderPizza("cheese");
  System.out.println("Joel ordered a " + pizza.getName() + "\n");
 }
}
 
 
public class SimplePizzaFactory {
 public Pizza createPizza(String type) {
  Pizza pizza = null;
  if (type.equals("cheese")) {
   pizza = new CheesePizza();
  }else if(type.equals("pepperoni")){
   pizza=new PepperoniPizza();
  }else if(type.equals("clam")){
   pizza=new ClamPizza();
  }else if(type.equals("veggie")){
   pizza=new VeggiePizza();
  }  
  return pizza;
 }
}
分享到:
评论

相关推荐

    《智能制造之路-数字化工厂》读书笔记.pdf

    《智能制造之路-数字化工厂》读书笔记.pdf《智能制造之路-数字化工厂》读书笔记.pdf

    JAVA模式的读书笔记

    例如,在选择工厂模式时,需要权衡简单工厂的便利性和工厂方法的可扩展性;而在使用抽象工厂模式时,应确保产品族之间的关联性和相似性。 总的来说,Java模式是提升代码质量的有效工具,它们可以帮助我们编写更加...

    C++读书笔记

    在深入理解C++的过程中,读书笔记是一种有效的学习方法,它能帮助我们整理思绪,巩固知识,并且在日后回顾时提供清晰的指引。以下是对C++编程语言的一些关键知识点的概述,这些内容可能涵盖在读书笔记中。 1. **...

    Effective Java读书笔记.pdf

    "Effective Java读书笔记" Effective Java是一本关于Java编程语言的经典...Effective Java读书笔记总结了Java语言的发展历程、静态工厂方法的应用、构造器模式的使用等重要知识点,为Java开发者提供了有价值的参考。

    《智能制造之路:数字化工厂》读书笔记模板.pptx

    智能制造之路:数字化工厂读书笔记模板.pptx 智能制造是基于新一代信息技术,贯穿设计、生产、管理、服务等制造活动各个环节,具有信息深度自感知、智慧优化自决策、精准控制自执行等功能的先进制造过程、系统与...

    代码质量-读书笔记

    下面将详细解读这个领域的核心知识点,并基于"代码质量-读书笔记"的内容展开讨论。 首先,我们要理解什么是代码质量。代码质量不仅仅关乎代码的正确性,更包括其可读性、可维护性、可扩展性等多个方面。良好的代码...

    Java游戏编程读书笔记

    通过阅读《Java游戏编程读书笔记》这本书,你可以深入了解这些概念并学习如何将它们应用到实际项目中。文档中的内容可能涵盖了Java游戏开发的基本原理、代码示例、最佳实践以及常见问题的解决方案。通过深入学习和...

    设计模式读书笔记

    创建型设计模式关注的是对象的创建,如工厂方法、抽象工厂、建造者、原型和单例模式,它们分别处理不同程度的对象创建延迟和实例化过程。结构型模式则涉及如何组合类和对象,包括适配器、桥接、组合、装饰器、外观、...

    JAVA面向对象编程(孙卫琴)读书笔记(三)

    在本篇【JAVA面向对象编程(孙卫琴)读书笔记(三)】中,我们将深入探讨Java编程语言的核心概念——面向对象编程。这篇读书笔记基于孙卫琴老师的著作,旨在帮助开发者更好地理解和应用面向对象的设计原则和技巧。下面...

    数据仓库读书笔记-BW

    本笔记主要基于 Jerome 的 BI Blog,涵盖了数据仓库的基本概念、架构以及建模方法。以下是笔记中的关键知识点: 1. **数据仓库架构**:数据仓库的架构通常包括数据源、ETL(抽取、转换、加载)、数据存储、OLAP...

    《看得见的手美国企业的管理革命》读书笔记.docx

    "《看得见的手美国企业的管理革命》读书笔记" 本书《看得见的手——美国企业的管理革命》是美国知名企业史学家小艾尔弗雷德·D.钱德勒教授的著作,通过翔实的资料和大量的个案研究,作者对美国现代工业管理的内容...

    读书笔记:反射的应用动态代理与工厂设计模式.zip

    读书笔记:反射的应用动态代理与工厂设计模式

    《智能制造之路-数字化工厂》读书笔记.docx

    《智能制造之路-数字化工厂》是一本探讨工业4.0、工业互联网和智能制造的书籍,由机械工业出版社出版,陈明和梁乃明合作撰写。该书主要关注这些新兴技术的发展,尤其是它们如何改变传统的生产流程和价值链。作者强调...

    effective java 读书笔记

    - Item1:静态工厂方法相比构造子,提供了更大的灵活性,例如可以返回对象的子类实例,或者在不改变API的情况下更改返回的对象类型。 - Item2:Builder模式适用于有大量构建参数的情况,它可以避免构造器的链式...

    Effective-Java读书笔记(上)

    ### Effective Java读书笔记(上) #### 第一章 引言 本书主要针对Java开发者提供了大量实用的编程指导建议,帮助读者提升代码质量和程序性能。在本章节中,我们将重点介绍对象的创建与销毁,以及一些重要的设计...

    《C#与.NET3.0高级程序设计》读书笔记

    读书笔记主要涵盖了以下几个方面的内容: 1. C#语言特性:包括匿名方法、lambda表达式、闭包、委托、事件、泛型、LINQ(Language Integrated Query)等。这些特性是C# 3.0及更高版本的核心,极大地增强了代码的...

    Effective-Java读书笔记

    《Effective Java》是Java...以上仅是《Effective Java》一书中部分核心知识点的概述,实际的读书笔记中会更详细地解释这些概念,并给出具体的示例代码。通过深入学习和实践,开发者可以极大地提升其Java编程的水平。

    JAVA与模式读书笔记。

    在《JAVA与模式读书笔记》中,我们探讨的是Java编程语言与设计模式的结合应用,这对于深入理解面向对象编程和提升软件开发能力至关重要。设计模式是软件工程中的最佳实践,它们是解决常见问题的模板,可以提高代码的...

    《数据中台》读书笔记第三部分

    本人学习中整理的读书笔记,适合想要入行的同学了解数据中台做什么?适合数据分析、产品经理转岗做数据产品的同学阅读。笔记分四部分。 第一部分:介绍什么是数据中台;数据中台建设与架构;评估与选择 第二部分:...

Global site tag (gtag.js) - Google Analytics