【软件工程综合实践】简单工厂模式之蛋糕店(完整代码)
一、蛋糕店点餐系统
需求:设计一个蛋糕店点餐系统。
设计一个蛋糕类(Cake),并定义其两个子类(草莓蛋糕【StrawberryCake】和柠檬蛋糕【LemonCake】);再设计一个蛋糕店类(CakeStore),蛋糕店具有点蛋糕的功能。
1、先写好Cake这个类
public class Cake {String type ="";public void addMilk(){}public void addFlour(){}public String getName(){return type;}
}
2、草莓蛋糕【StrawberryCake】
public class StrawberryCake extends Cake{public StrawberryCake() {}@Overridepublic void addMilk() {System.out.println("给蛋糕加牛奶!");}@Overridepublic void addFlour() {System.out.println("给蛋糕加面粉!");}@Overridepublic String getName() {return "草莓蛋糕新鲜出炉!";}
}
3、柠檬蛋糕【LemonCake】
public class LemonCake extends Cake {@Overridepublic void addMilk() {System.out.println("给蛋糕加牛奶!");}@Overridepublic void addFlour() {System.out.println("给蛋糕加面粉!");}@Overridepublic String getName() {return "柠檬蛋糕新鲜出炉!";}
}
4、蛋糕店
public class CakeStore {public void welcome(){System.out.println("欢迎来到蛋糕餐厅!");System.out.println("-------------------------");}public void goodbye(){System.out.println("-------------------------");System.out.println("欢迎下次光临!");}
}
5、客户端
public class Client {public static void main(String[] args) {Scanner input =new Scanner(System.in);CakeStore cakeStore = new CakeStore();cakeStore.welcome();System.out.println("请选择蛋糕口味(StrawberryCake/LemonCake)");String type = input.nextLine();Cake cake;cake = CakeFactory.createCake(type);System.out.println(cake.getName());cakeStore.goodbye();// CakeStore cakeStore = new CakeStore();
// Cake cake = cakeStore.createCake(type);
// System.out.println(cake.getName());}
}
6、蛋糕工厂类
如果需要增加几种蛋糕,需要修改CakeStore代码。如果我们使用工厂来生产对象,我们就只需要和工厂沟通,彻底和对象解耦,因此,工厂模式最大的有点是解耦
public class CakeFactory {public static Cake createCake(String type) {Cake cake = null;if("StrawberryCake".equals(type)){cake = new StrawberryCake();}else if("LemonCake".equals(type)){cake = new LemonCake();}cake.addMilk();cake.addFlour();return cake;}
}
二、运行结果
三、总结
工厂模式封装了创建对象的过程,可以通过参数直接获取对象。把对象的创建和业务逻辑层分开,这样以后就避免了修改客户代码,如果要实现新产品直接修改工厂类,而不需要在原代码中修改,这样就降低了客户代码修改的可能性,更加容易扩展。
工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。
当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利,违背了“开闭原则”。
【软件工程综合实践】简单工厂模式之蛋糕店(完整代码)相关推荐
- php设计一个盒子类代码_PHP设计模式之简单工厂模式(Simple Factory)代码实例大全(七)...
目的[1] 简单工厂模式是一个精简版的工厂模式. 它与静态工厂模式最大的区别是它不是『静态』的.因为非静态,所以你可以拥有多个不同参数的工厂,你可以为其创建子类.甚至可以模拟(Mock)它,这对编写可 ...
- 二次封装图片第三方框架——简单工厂模式的运用
CSDN首发地址: 前言 写在前头,这篇博客对于老司机们没什么多大的意义,老司机们就不用看了,对于新手还是有很大实用价值的. 平时在项目中,你们有没有遇到这样的情况,比如之前项目是使用开源框架Imag ...
- 《JAVA与模式》之简单工厂模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂 ...
- 简单工厂模式、工厂方法模式与抽象工厂模式
1. 简单工厂模式 1. 1 简单工厂模式的定义 简单工厂模式也被称为静态工厂模式;使用简单工厂模式可以将产品的"消费"和生产完全分开,客户端只需要知道自己需要什么产品,如何来使用 ...
- Java设计模式之简单工厂模式实验(软件工程综合实践课程第二周)
实验目的 1 .理解软件设计的相关理论 : 2 .理解面向对象设计原则: 实验内容 1 .简单工厂模式实验: (1) 参考讲义上的代码,利用简单工厂模式完成计算器应用程序: (2) 画出计算器程序简单 ...
- 设计模式之工厂方法模式、抽象工厂模式的概念和实现及使用“反射技术+读取配置文件”的方法对工厂模式进行改进(软件工程综合实践课程第三周个人作业)
文章目录 一.实验目的 二.知识总结 1.工厂方法模式简介 2.抽象工厂模式简介 3.工厂模式小结 4.利用"反射技术+读取配置文件"的方法改进程序 三.实验内容 1. 工厂模式实 ...
- 设计模式C#描述之——简单工厂模式、抽象工厂模式、单例与多例模式
设计模式C#描述之--简单工厂模式 前 言:设计模式是软件开发领域的精髓之一.学好设计模式是目前每一个开发人员的必修课.目前关于设计模式的书很多,其中比较好的有GOF那本的中译本,但并 不很适合初学者 ...
- Java设计模式(1)——创建型模式之简单工厂模式(Simple Factory)
设计模式系列参考: http://www.cnblogs.com/Coda/p/4279688.html 一.概述 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高 ...
- 简单工厂模式与工厂方法模式
在OO设计领域,我们知道前人总结了不少的经验,许多的经验在现代软件工程过程中已经被认为是原则来遵守.下面笔者摘抄几项下文涉及到的OO原则的定义. OCP(开闭原则,Open-Closed Princi ...
最新文章
- 2013杭电warm up1 hdu 4712 Hamming Distance
- C语言函数手册:c语言库函数大全|C语言标准函数库|c语言常用函数查询
- Ansible-Playbook-template算数运算以及流程控制
- java.sql.SQLException: Io 异常: Got minus one from a read call
- 如何快速的学习html5,高效快速学习HTML5的技巧
- java火焰纹章攻略女神之剑_《火焰纹章风花雪月》白云之章-女神再生仪式图文攻略...
- android中利用实现二级联动的效果
- 3.07 检测两个表中是否有相同的数据
- C#对象的浅拷与深拷贝
- linux装软raid,LINUX中软RAID的实现方案
- rbac yii 1
- SSM项目实战之十八:基础数据的修改和删除
- P2114 起床困难综合症
- django drf 初始化配置(mysql、跨域访问、默认用户模型)和用户模型重写,数据迁移,解决用户模型重写后无法创建超级用户的问题
- (转)996下的程序员,该如何保证自己的身体健康?
- 法国内政部选择IDEMIA和Sopra Steria为其开发新标准边境管制系统
- kbd通达2017版破解后,自定义菜单无法调用表单开启流程/kbdkbd 错误,请联系管理员 /general/approve_center/new/insert.php/kbd
- go语言 func函数
- 中兴笔试题目总结(四)软件工程部分
- Tensorflow pb模型转uff模型方法及遇到KeyError20和expected Const问题解决