简单工厂,工厂,抽象工厂
//简单工厂模式
public class PizzaStore{
SimplePizzaFactory factory;
public PizzaStore(SimplePizzaFactory factory){
this.factory=factory;
}
public Pizza orderPizza(String type){
Pizza pizza;
pizza=factory.createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
}
//将经常要改变的代码用简单工厂来完成
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;
}
}
//工厂方法
public abstract class PizzaStore{
public Pizza orderPizza(String type){
Pizza pizza=null;
pizza=createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
protected abstract Pizza createPizza(String type); //实例化比萨的责任被移到一个“方法”中,此方法就如同是一个工厂
}
//实际实现的PizzaStore
public class NYPizzaStore extends PizzaStore{
Pizza createPizza(String item){
if(item.equals("cheese")){
return new NYStyleCheesePizza();
}else if(item.equals("veggie")){
return new NYStyleVeggiePizza();
}else if(item.equals("clam")){
return new NYStyleClamPizza();
}else if(item.equals("pepperoni")){
return new NYStylePepperoniPizza();
}else return null;
}
}
public class ChicagoPizzaStore extends PizzaStore{
Pizza createPizza(String item){
if(item.equals("cheese")){
return new ChicagoStyleCheesePizza();
}else if(item.equals("veggie")){
return new ChicagoStyleVeggiePizza();
}else if(item.equals("clam")){
return new ChicagoStyleClamPizza();
}else if(item.equals("pepperoni")){
return new ChicagoStylePepperoniPizza();
}else return null;
}
}
//抽象的Pizza类
public abstrator class Pizza{
String name; //每个pizza都有名称,面团类型,酱料类型一套佐料
String dough;
String sauce;
ArrayList toppings=new ArayList();
void prepare(){
Syetem.out.println("preparing " +name);
Syetem.out.println("Tossing dough...");
Syetem.out.println("Adding sauce...");
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.pringln("Place pizza in official PizzaStore box");
}
public String getName(){
return name;
}
}
//具体子类
public class NyStyleCheesePizza exteds Pizza{
public NYStyleCheesePizza(){
name="NY Style Sauce and Cheese Pizza";
dough="Thin Crust Dough";
sauce="Marinara Sauce";
toppings.add("Grated Reggiano Cheese");
}
}
public class ChicagoStyleCheesePizza extends Pizza{
public ChicagoStyleCheesePizza(){
name="Chicago sty;e 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");
} //在外面覆盖方法
}
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 abstract class pizza{
String name;
Dough dough;
Sauce sauce;
Veggies veggies[];
Cheese cheese;
Pepperoni pepperoni;
Clams clam;
abstract void prepare(); //将prepare定义成抽象的
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");
}
void setName(String name){
this.name=name;
}
String getName(){
return name;
}
public String toString(){
//打印比萨的代码
}
}
public class CheesePizza extends Pizza{
PizzaIngredientFactory ingredientFactory;
public CheesePizza(PizzaIngredientFactory ingredientFactory){
this.ingredientFactory=ingredientFactory;
}
void prepare(){
System.out.println("Preparing "+name);
dough=ingredientFactory.createDough();
sauce=ingredientFactory.createSauce();
cheese=ingredientFactory.createCheese();
}
}
public class ClamPizza extends Pizza{
PizzaIngredientFactory ingredientFactory;
public ClamPizza(PizzaIngredientFactory ingredientFactory){
this.ingredientFactory=ingredientFactory;
}
void prepare(){
System.out.println("Preparing "+name);
dough=ingredientFactory.createDough();
sauce=ingredientFactory.createSauce();
cheese=ingredientFactory.createCheese();
clam=ingredientFactory.createClam();
}
}
//创建原料工厂
public interface PizzaIngredientFactory{
public Doubh createDough();
public Sauce createSauce();
public Cheese createCheese();
public Veggies[] createVeggies();
public Clams createClam();
}
//纽约原料工厂的实现
public class NYPizzaIngredientFactory implements PizzaIngredientFactory{
public Dough createDough(){
return new ThinCrustDough();
}
public Sauce createSauce(){
return new MarinaraSauce();
}
public Cheese createCheese(){
return new ReggianoCheese();
}
public Veggies[] createVeggies(){
Veggies veggies[]={new Garlic(),new Onion(),new Mushroom(),new REdRepper() };
return veggies;
}
public Pepperoni createPepperoni(){
return new SlicedPepperoni();
}
public Clams createClam(){
return new FreshClams();
}
}
//抽象的比萨店
public abstract class PizzaStore{
public Pizza orderPizza(String type){
Pizza pizza=null;
pizza=createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
protected abstract Pizza createPizza(String type); //实例化比萨的责任被移到一个“方法”中,此方法就如同是一个工厂
}
//比萨店
public class NYPizzaStore extends PizzaStore{
protecated Pizza createPizza(String item){
Pizza pizza=null;
PizzaIngreidentFactory ingredientFactory=new NYPizzaIngredientFactory();
if(item.equals("cheese")){
pizza=new CheesePizza(ingredientFactory); //把工厂传递给每一个比萨,以便比萨能从工厂中取得原料
pizza.setName("New York Style Cheese Pizza");
}else if(item.equals("veggie")){
pizza=new VeggiePizza(ingredientFactory);
pizza.setName("New York Style Veggie Pizza");
}else if(item.equals("clam")){
pizza=new ClamPizza(ingredientFactory);
pizza.setName("New York Style Clam Pizza"); //对于每一种比萨我们实例化一个新的比萨,并传进该种比萨所需的工厂。
}else if(item.equals("pepperoni")){
pizza=new PepperoniPizza(ingredientFactory);
pizza.setName("New York Style Pepperoni Pizza");
}
return pizza;
}
}
简单工厂,工厂,抽象工厂相关推荐
- 设计模式--简单工厂VS工厂VS抽象工厂
前几天我一直在准备大学毕业生,始终绑起来,如今,终于有时间去学习设计模式.我们研究今天的话题是植物三口之家的设计模式的控制--简单工厂VS工厂VS抽象工厂. 经过细心推敲,我们不难得出:工厂模式是简单 ...
- 创建型模式:工厂模式(简单工厂+工厂方法+抽象工厂)
一.引子 话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰).Bmw(宝马).Audi(奥迪)),还雇了司机为他开车.不过,爆发户坐车时总是这样:上Benz车后跟司机说"开奔驰车!& ...
- Head First设计模式读书笔记四 简单工厂 工厂模式 抽象工厂模式
本文示例代码材料源自Head First设计模式 以前整理自己整理的链接: 工厂模式 https://blog.csdn.net/u011109881/article/details/56541580 ...
- 简单工厂、工厂、抽象工厂
简单工厂模式:专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类.它又称为静态工厂方法模式,属于类的创建型模式. 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪 ...
- 简单工厂和抽象工厂有什么区别?
简单工厂和抽象工厂有什么区别? 简单工厂模式 是由一个工厂对象创建产品实例,简单工厂模式的工厂类一般是使用静态方法,通过不同的参数的创建不同的对象实例 可以生产结构中的任意产品,不能增加新的产品 抽象 ...
- 简单工厂-工厂方法-抽象工厂
目录 简单工厂 工厂方法 抽象工厂 前言 之前看书认真了解过这三种模式,但因为没有做记录,都给忘完了.现在重新分析网上的博客发现跟书里讲的不太一样,哎-.现在能做的就是把现在的理解给记录一下,若以后有 ...
- 简单工厂 工厂方法 抽象工厂 如何理解
文章目录 前言 一.简单工厂 二.工厂方法 三.抽象工厂 总结 前言 简单工厂,工厂方法,抽象工厂,三者有什么区别? 搞清楚他们有什么弊端,以发展的角度去观察,理解会更加深入. 提示:以下是本篇文章正 ...
- 从DRP架构进行简单工厂代替抽象工厂的SWOT分析
一.前情回顾 1.简单工厂 VS 工厂方法VS抽象工厂: [简单工厂 VS 工厂方法VS抽象工厂](http://blog.csdn.net/wangyy130/article/details/248 ...
- 设计模式:简单工厂、工厂、抽象工厂
2014年读过有关设计模式的书籍,当时在写C#程序,很受益. 可惜,当时没有再深入.仔细地研读和总结,后面基本上没有写代码了,也就没有看了. 去年开始学习使用PHP,需要把这一块认真地捡起来了. 虽然 ...
- java 三种工厂模式(简单工厂+工厂方法+抽象工厂)
一.简单工厂模式 概述 简单工厂模式:定义一个工厂类,它可以根据参数的不同返回不同类的 实例,被创建的实例通常都具有共同的父类.因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因 ...
最新文章
- 史上首次,强化学习算法控制核聚变登上Nature:DeepMind让人造太阳向前一大步...
- JavaWeb学习总结(一)——JavaWeb开发入门(转载)
- TypeScript 类型兼容
- Ryu oslo学习总结
- html表单自动提交表单提交表单数据类型,表单
- 登录时记住用户名和密码及cookie案例应用
- ReSIProcate环境搭建
- anguarjs 上传图片预览_JS控制上传图片个数,预览上传图片
- Objective-C与Swift下的自定义打印函数(Debug和Release)
- 华为平板解锁工具_华为平板M6 10.8英寸首发评测 办公+影音+智能全面开花
- python+opencv修改像素值、创建图像
- js获取不同时区时间
- 【Python编程】《Python学习手册》思维导图
- docker2-镜像原理及创建新的镜像
- 沪江网校前端架构漫谈
- java泛型 方法返回值带有泛型 <T>
- nonebot2调用文本API发送随机文本
- xcconfig编写指南
- sklearn中warm_start参数的作用详解
- poj 3525 多边形内核,缩进