`
wangpx
  • 浏览: 198543 次
  • 性别: 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

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

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

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

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

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

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

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

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

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

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

    java源码解读-DesignPattern:Android源码设计模式解析与实战读书笔记源代码

    Android源码设计模式解析与实战读书笔记源代码 说明: 包名factorypattern.normal表示的是工厂方法模式的普通用法 包名factorypattern.practices表示的是工厂方法模式的常用 包名observerpattern表示的是观察者模式...

    notes:JavaJava后端工程师的学习笔记https

    loveincode's notes 学习工作中的一些记录,收藏。 操作系统 , 编译原理 , 计算机网络 , 互联网协议... 常用数据结构与算法 Java 实现 数据结构 与 排序算法 ...读书笔记 Effective Java , HTTP权威指南 , Java

    《人性的弱点》读书分享PPT

    这是一套《人性的弱点》读书分享PPT,共27页; PPT模板封面使用了书籍背景图片,中间放置带有阴影的白色矩形卡片,填写《人性的...关键词:《人性的弱点》读书分享PPT下载,《人性的弱点》读书笔记PPT下载,.PPTX格式

    Javascript 面向对象 (声明篇)

    由于才疏学浅,我不得不将《Javascript 高级程序设计》中的部分内容摘抄过来,这些同时也算是我的读书笔记吧。由于 Javascript 面向对象机制及其的重要,而且内容非常的繁多,在这里就分篇章逐个介绍。 使用对象首先...

    leetcode下载-Android_AutoTest:Android_AutoTest

    [ReadingNotes(读书笔记)] [Project(项目)] 第六部分 [InterviewExperience(面试经验)] 有任何问题欢迎联系: 欢迎关注我的知乎账号: 微信公众号: 幼稚园老大哥 微博账号: 已同步到 拒绝任何形式的商业用途。

    asp.net知识库

    Essential .NET 读书笔记 [第一部分] NET FrameWork的Collections支持 .NET的反射在软件设计上的应用 关于跨程序集的反射 实现C#和VB.net之间的相互转换 深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述...

Global site tag (gtag.js) - Google Analytics