传统方式解决披萨订购(工厂模式实例)
传统方式解决披萨订购(工厂模式实例)
包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种类就需要啊修改如下
传统方式解决披萨订购(工厂模式实例)相关推荐
- 设计模式之抽象工厂模式实例(c++)
抽象工厂模式实例之电器工厂: 电器工厂类图: 此节也用到了C++反射注册机制,可以参考上篇内容,是一样的. 抽象工厂和工厂方法.简单工厂是有关系的.当抽象工厂中的每一个具体工厂类只生产一个产品对象的时 ...
- 课程介绍 复习 创建对象的三种方式 自定义构造函数创建对象 工厂模式创建对象
课程介绍 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8 ...
- java工厂模式实例(设计模式)
目录 java工厂模式 工厂模式其实又分为三种 1.简单工厂模式: 简单工厂模式(非静态) 简单工厂模式(静态): 2.工厂方法模式: 3.抽象工厂模式: java工厂模式 开篇声明,此理解为作者自身 ...
- JavaScript设计模式-10.工厂模式实例xhr
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 < ...
- mysql工厂模式_设计模式-三种工厂模式实例
1.简单工厂模式:代替new产生对象,产品的类型比较少时. 我们要获得三种不同的数据库对象,如Mysql,SQLserver,Oracle,它们拥有共同的特征,即可以进行抽象,简单工厂目的是将获得具体 ...
- java 工厂 单例_java 单例模式和工厂模式实例详解
单例模式根据实例化对象时机的不同分为两种:一种是饿汉式单例,一种是懒汉式单例. 私有的构造方法 指向自己实例的私有静态引用 以自己实例为返回值的静态的公有的方法 饿汉式单例 public class ...
- 设计模式-抽象工厂模式实例(二)
(1)案例背景: 计算机包含内存(RAM),CPU等硬件设备 (2)实现步骤: 根据题意,使用抽象工厂模式并画出类图,类图中应包含一个抽象工厂类AbstractFactory, PcFactory和M ...
- java简单工厂模式实例造车,JAVA设计模式学习5——工厂方法模式
工厂方法模式(Factory Method)又称虚拟构造子模式,可以说是简单工厂的抽象,也可以理解为简单工厂是退化了的工厂方法模式,其表现在简单工厂丧失了工厂方法的多态性.我们前一节中提到当产品结构变 ...
- 抽象工厂模式--实例分析
应用场景 某手机操作系统可以根据用户不同的喜好在多种主题之间进行切换,随着主题的变化,系统中的字体.app图标.壁纸.锁屏壁纸等元素会随之发生变化. 使用抽象工厂模式设计手机主题库 创建元素接口 // ...
最新文章
- 51 执行远程命令(Paramiko)
- 移动对meta的定义
- 面试题23_从上往下打印二叉树
- 对GC垃圾收集的一点整理
- 十分钟快速了解 ES6 Promise
- linux目录详解i-node,i-node节点与链接
- URI、URL与URN【定义+联系】
- Linux上安装Oracle 10g 装后感
- 银企直连ukey 集中管理方案
- 精通 C++ 是个毛意思
- 自用笔记傻妞返利配置
- EZchip花1.3亿美元买Tilera然后以8亿美元把自己与Tilera一起卖掉
- Android系统架构和应用程序基本概念详解
- PCB邮票孔的作用及详细设计指南
- 深度长文:AMD的崛起、衰落与复兴
- 《C++ Primer Plus》(第6版)第3章编程练习
- 【神经网络】神经网络中的矩阵的理解
- 【源码安装python3.8】
- MySQL的基本知识点,一千行命令概括
- 方便又高效,这几款远程办公软件值得学习