传统方式解决披萨订购(工厂模式实例)


包1:
披萨

package com.atguigu.design.factory;//将pizza做成抽象类public abstract class Pizza {protected String name;public abstract void prepare();//抽象方法,不同pizza的准备方法不同,所以 把prepare做成抽象的public void bake() { System.out.println(name+"bakeing;");                     }public void cut() { System.out.println(name+"cutting;");                  }public void box() {System.out.println(name+"boxing;");     }public void setName(String name) { this.name=name; }
}

奶酪披萨

package com.atguigu.design.factory;public class cheesepizza extends Pizza {@Override public void prepare() { System.out.println("给芝士披萨准备原材料"); }
}

胡椒披萨:

package com.atguigu.design.factory;public class Paperpizza extends Pizza{public void prepare() {System.out.println("给胡椒披萨准备原材料");};}

希腊披萨

package com.atguigu.design.factory;//pizza类做成抽象的public class Greekpizza extends Pizza {@Override public void prepare() { System.out.println("给希腊披萨准备原材料!!!");       }
}

**包2: **
订购披萨:

package com.atguigu.design.Orderfactory;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import com.atguigu.design.factory.Greekpizza;import com.atguigu.design.factory.Pizza;import com.atguigu.design.factory.cheesepizza;public class Orderpizza {//构造器public Orderpizza() {Pizza pizza=null;String orderType;//订购披萨的类型do {orderType=getType();if(orderType.equals("greek")) {pizza=new Greekpizza();pizza.setName("希腊披萨");}else if(orderType.equals("cheese")){pizza=new cheesepizza();pizza.setName("芝士披萨");//设置在不同包里面的属性,可以通过调用之前包里的方法来实现}else {System.out.println("订购披萨失败!!!");break;} //输出披萨制作过程pizza.prepare();pizza.bake();pizza.cut();pizza.box();}while(true);}private String getType() {//获取订单try {BufferedReader strin =new BufferedReader(new
InputStreamReader(System.in));System.out.println("input pizza 种类:");String str=strin.readLine();return str;}catch (IOException e) {e.<u>printStackTrace</u>();return ""; } }
} 

//如何更改名字:设置在不同包里面的属性,可以通过调用之前包里的方法来实现
传统方法的优缺点:
**优点:**好理解
**缺点:**违反了设计模式的ocp原则,即对扩展开放,对修改关闭。即当我们给类增加新功能的时候,尽量不修改代码,或者尽可能少修改

比如:我们要新增加一个Pizza种类就需要啊修改如下

传统方式解决披萨订购(工厂模式实例)相关推荐

  1. 设计模式之抽象工厂模式实例(c++)

    抽象工厂模式实例之电器工厂: 电器工厂类图: 此节也用到了C++反射注册机制,可以参考上篇内容,是一样的. 抽象工厂和工厂方法.简单工厂是有关系的.当抽象工厂中的每一个具体工厂类只生产一个产品对象的时 ...

  2. 课程介绍 复习 创建对象的三种方式 自定义构造函数创建对象 工厂模式创建对象

    课程介绍 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8 ...

  3. java工厂模式实例(设计模式)

    目录 java工厂模式 工厂模式其实又分为三种 1.简单工厂模式: 简单工厂模式(非静态) 简单工厂模式(静态): 2.工厂方法模式: 3.抽象工厂模式: java工厂模式 开篇声明,此理解为作者自身 ...

  4. JavaScript设计模式-10.工厂模式实例xhr

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 < ...

  5. mysql工厂模式_设计模式-三种工厂模式实例

    1.简单工厂模式:代替new产生对象,产品的类型比较少时. 我们要获得三种不同的数据库对象,如Mysql,SQLserver,Oracle,它们拥有共同的特征,即可以进行抽象,简单工厂目的是将获得具体 ...

  6. java 工厂 单例_java 单例模式和工厂模式实例详解

    单例模式根据实例化对象时机的不同分为两种:一种是饿汉式单例,一种是懒汉式单例. 私有的构造方法 指向自己实例的私有静态引用 以自己实例为返回值的静态的公有的方法 饿汉式单例 public class ...

  7. 设计模式-抽象工厂模式实例(二)

    (1)案例背景: 计算机包含内存(RAM),CPU等硬件设备 (2)实现步骤: 根据题意,使用抽象工厂模式并画出类图,类图中应包含一个抽象工厂类AbstractFactory, PcFactory和M ...

  8. java简单工厂模式实例造车,JAVA设计模式学习5——工厂方法模式

    工厂方法模式(Factory Method)又称虚拟构造子模式,可以说是简单工厂的抽象,也可以理解为简单工厂是退化了的工厂方法模式,其表现在简单工厂丧失了工厂方法的多态性.我们前一节中提到当产品结构变 ...

  9. 抽象工厂模式--实例分析

    应用场景 某手机操作系统可以根据用户不同的喜好在多种主题之间进行切换,随着主题的变化,系统中的字体.app图标.壁纸.锁屏壁纸等元素会随之发生变化. 使用抽象工厂模式设计手机主题库 创建元素接口 // ...

最新文章

  1. 51 执行远程命令(Paramiko)
  2. 移动对meta的定义
  3. 面试题23_从上往下打印二叉树
  4. 对GC垃圾收集的一点整理
  5. 十分钟快速了解 ES6 Promise
  6. linux目录详解i-node,i-node节点与链接
  7. URI、URL与URN【定义+联系】
  8. Linux上安装Oracle 10g 装后感
  9. 银企直连ukey 集中管理方案
  10. 精通 C++ 是个毛意思
  11. 自用笔记傻妞返利配置
  12. EZchip花1.3亿美元买Tilera然后以8亿美元把自己与Tilera一起卖掉
  13. Android系统架构和应用程序基本概念详解
  14. PCB邮票孔的作用及详细设计指南
  15. 深度长文:AMD的崛起、衰落与复兴
  16. 《C++ Primer Plus》(第6版)第3章编程练习
  17. 【神经网络】神经网络中的矩阵的理解
  18. 【源码安装python3.8】
  19. MySQL的基本知识点,一千行命令概括
  20. 方便又高效,这几款远程办公软件值得学习

热门文章

  1. 记一次CVPR写作投稿经验总结
  2. Docker构建redis集群
  3. 在C++中缺少一些文件时的解决方法
  4. 转:关于对SSDP协议的解析
  5. CAD图纸中存在多个字体如何将其全部改为统一字体
  6. 解决devtools打不开
  7. 嘴对嘴系列之es核心基础概念之文档和索引
  8. 常见windows系统快捷键
  9. bp上传php文件,文件上传-1
  10. matlab作图局部放大工具