1,定义抽象产品类

package com.pattern.factory;

import java.util.ArrayList;

public abstract class Pizza {
String name;
String dough;
String sauce;
ArrayList toppings = new ArrayList(); void prepare(){
System.out.println("Prepareing "+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));
}
} void bake(){
System.out.println("Bake for 25 minutes at 350");
} void cut(){
System.out.println("Cutting the pizza into diagonal slices");
} void box(){
System.out.println("Place pizza in official PizzaStore box");
} public String getName(){
return name;
}
}

2,具体产品类

package com.pattern.factory;
public class ChicagoStyleCheesePizza extends Pizza {
  public ChicagoStyleCheesePizza(){
  name = "Chicago Style Deep Dish Cheese Pizza";
  dough = "Extra Thick Crust Dough";
  sauce = "Plum Tomato Sauce";
  
  toppings.add("Shredded Mozzarella Cheese");
 }
 
 void cut(){
  System.out.println("Cutting the pizza into square slices");
 }
}
package com.pattern.factory;

public 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");
}
}

3,定义抽象工厂类

package com.pattern.factory;

public abstract class PizzaStore {

	public Pizza orderPizza(String type){
Pizza pizza ;
pizza = createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box(); return pizza;
} protected abstract Pizza createPizza(String type) ; }

4,定义具体工厂类

package com.pattern.factory;

import com.pattern.factory.bean.ChicagoStyleClamPizza;
import com.pattern.factory.bean.ChicagoStylePepperoniPizza;
import com.pattern.factory.bean.ChicagoStyleVeggiePizza; public class ChicagoPizzaStore extends PizzaStore { /**
* @see com.pattern.factory.PizzaStore#createPizza(java.lang.String)
*/
@Override
protected Pizza createPizza(String type) {
if(type.equals("cheese")){
return new ChicagoStyleCheesePizza();
} else if(type.equals("veggie")){
return new ChicagoStyleVeggiePizza();
} else if(type.equals("clam")){
return new ChicagoStyleClamPizza();
} else if(type.equals("pepperoni")){
return new ChicagoStylePepperoniPizza();
} else {
return null;
}
} }
package com.pattern.factory;

import com.pattern.factory.bean.NYStyleClamPizza;
import com.pattern.factory.bean.NYStylePepperoniPizza;
import com.pattern.factory.bean.NYStyleVeggiePizza; public class NYPizzaStore extends PizzaStore { /**
* @see com.pattern.factory.PizzaStore#createPizza(java.lang.String)
*/
@Override
protected Pizza createPizza(String type) {
if(type.equals("cheese")){
return new NYStyleCheesePizza();
} else if(type.equals("veggie")){
return new NYStyleVeggiePizza();
} else if(type.equals("clam")){
return new NYStyleClamPizza();
} else if(type.equals("pepperoni")){
return new NYStylePepperoniPizza();
} else {
return null;
}
} }

5,测试类

package com.pattern.factory;

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 order a "+ pizza.getName()+"\n");
}
}

测试结果:

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. 第9章 用内核对象进行线程同步(2)_可等待计时器(WaitableTimer)

    9.4 可等待的计时器内核对象——某个指定的时间或每隔一段时间触发一次 (1)创建可等待计时器:CreateWaitableTimer(使用时应把常量_WIN32_WINNT定义为0x0400) 参数 ...

  2. for循环与for循环嵌套

    今天温习了下分支语句跟for循环,主要讲解了for循环嵌套,这里开始有点迷糊了,整理下思路在做练习 for循环嵌套用我自己的大白话来说就是一个外圈的for程序里面一个套着一个小的for程序,如果在范围 ...

  3. 当手机被PS掉,人们看到的是手中的灵魂

    Eric Pickersgill是一名摄影师,最近喜欢拍摄并记录人们使用智能手机的情景,不过不同的是,在最终作品中会将手机从人们手中PS掉,一刹那会进入一个奇怪的世界.黑白照片也极具冲击力. 每个人神 ...

  4. MVC 表单提交【转】

    [转自]:http://www.cnblogs.com/dengdl/archive/2011/07/14/2106849.html 在做Asp.Net MVC项目中,都知道View负责页面展示数据或 ...

  5. 基于jquery的tips悬浮消息提示插件tipso

    <a href="javascript:;" class="disabled" data-tipso="Tips" id=" ...

  6. APIO2013 tasksauthor

    喜闻乐见的提答题,这道题还是蛮有趣的 数据结构题写得心塞,来一道提答意思意思 如果喜欢这类题的话还可以去做做uoj83. 这题是给出了两个问题,一个最短路,一个无向图染色问题. Data 1 Floy ...

  7. 漫谈python中的搜索/排序

    在数据结构那一块,搜索有顺序查找/二分查找/hash查找,而排序有冒泡排序/选择排序/插入排序/归并排序/快速排序.如果遇到数据量和数组排列方式不同,基于时间复杂度的考虑,可能需要用到混合算法.如果用 ...

  8. C语言:关于socket的基础知识点

    /** * ---结构体--- * * #include <sys/socket.h> * struct sockaddr { * unsigned short sa_family; * ...

  9. Linode Centos6.5从零开始装环境...流水账

    安装JDK 下载. 先通过oracle网站, 下载, 得到link后, 在linode命令行里wget, 速度飞快, 但是文件名要改下. 其中JDK6是.bin, 其他都是tar.gz, bin直接执 ...

  10. 32位计时器极端情况下产生的bug

    用每毫秒更新的32位变量用来计时, 使用这个变量计算离上次操作是否间隔10秒.两种写法: f - lastF <10, 和 f