一、蛋糕店点餐系统

需求:设计一个蛋糕店点餐系统。

设计一个蛋糕类(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;}
}

二、运行结果


三、总结

工厂模式封装了创建对象的过程,可以通过参数直接获取对象。把对象的创建和业务逻辑层分开,这样以后就避免了修改客户代码,如果要实现新产品直接修改工厂类,而不需要在原代码中修改,这样就降低了客户代码修改的可能性,更加容易扩展。

工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。

当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利,违背了“开闭原则”。

【软件工程综合实践】简单工厂模式之蛋糕店(完整代码)相关推荐

  1. php设计一个盒子类代码_PHP设计模式之简单工厂模式(Simple Factory)代码实例大全(七)...

    目的[1] 简单工厂模式是一个精简版的工厂模式. 它与静态工厂模式最大的区别是它不是『静态』的.因为非静态,所以你可以拥有多个不同参数的工厂,你可以为其创建子类.甚至可以模拟(Mock)它,这对编写可 ...

  2. 二次封装图片第三方框架——简单工厂模式的运用

    CSDN首发地址: 前言 写在前头,这篇博客对于老司机们没什么多大的意义,老司机们就不用看了,对于新手还是有很大实用价值的. 平时在项目中,你们有没有遇到这样的情况,比如之前项目是使用开源框架Imag ...

  3. 《JAVA与模式》之简单工厂模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂 ...

  4. 简单工厂模式、工厂方法模式与抽象工厂模式

    1. 简单工厂模式 1. 1 简单工厂模式的定义 简单工厂模式也被称为静态工厂模式;使用简单工厂模式可以将产品的"消费"和生产完全分开,客户端只需要知道自己需要什么产品,如何来使用 ...

  5. Java设计模式之简单工厂模式实验(软件工程综合实践课程第二周)

    实验目的 1 .理解软件设计的相关理论 : 2 .理解面向对象设计原则: 实验内容 1 .简单工厂模式实验: (1) 参考讲义上的代码,利用简单工厂模式完成计算器应用程序: (2) 画出计算器程序简单 ...

  6. 设计模式之工厂方法模式、抽象工厂模式的概念和实现及使用“反射技术+读取配置文件”的方法对工厂模式进行改进(软件工程综合实践课程第三周个人作业)

    文章目录 一.实验目的 二.知识总结 1.工厂方法模式简介 2.抽象工厂模式简介 3.工厂模式小结 4.利用"反射技术+读取配置文件"的方法改进程序 三.实验内容 1. 工厂模式实 ...

  7. 设计模式C#描述之——简单工厂模式、抽象工厂模式、单例与多例模式

    设计模式C#描述之--简单工厂模式 前 言:设计模式是软件开发领域的精髓之一.学好设计模式是目前每一个开发人员的必修课.目前关于设计模式的书很多,其中比较好的有GOF那本的中译本,但并 不很适合初学者 ...

  8. Java设计模式(1)——创建型模式之简单工厂模式(Simple Factory)

    设计模式系列参考: http://www.cnblogs.com/Coda/p/4279688.html 一.概述 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高 ...

  9. 简单工厂模式与工厂方法模式

    在OO设计领域,我们知道前人总结了不少的经验,许多的经验在现代软件工程过程中已经被认为是原则来遵守.下面笔者摘抄几项下文涉及到的OO原则的定义. OCP(开闭原则,Open-Closed Princi ...

最新文章

  1. 2013杭电warm up1 hdu 4712 Hamming Distance
  2. C语言函数手册:c语言库函数大全|C语言标准函数库|c语言常用函数查询
  3. Ansible-Playbook-template算数运算以及流程控制
  4. java.sql.SQLException: Io 异常: Got minus one from a read call
  5. 如何快速的学习html5,高效快速学习HTML5的技巧
  6. java火焰纹章攻略女神之剑_《火焰纹章风花雪月》白云之章-女神再生仪式图文攻略...
  7. android中利用实现二级联动的效果
  8. 3.07 检测两个表中是否有相同的数据
  9. C#对象的浅拷与深拷贝
  10. linux装软raid,LINUX中软RAID的实现方案
  11. rbac yii 1
  12. SSM项目实战之十八:基础数据的修改和删除
  13. P2114 起床困难综合症
  14. django drf 初始化配置(mysql、跨域访问、默认用户模型)和用户模型重写,数据迁移,解决用户模型重写后无法创建超级用户的问题
  15. (转)996下的程序员,该如何保证自己的身体健康?
  16. 法国内政部选择IDEMIA和Sopra Steria为其开发新标准边境管制系统
  17. kbd通达2017版破解后,自定义菜单无法调用表单开启流程/kbdkbd 错误,请联系管理员 /general/approve_center/new/insert.php/kbd
  18. go语言 func函数
  19. 中兴笔试题目总结(四)软件工程部分
  20. Tensorflow pb模型转uff模型方法及遇到KeyError20和expected Const问题解决

热门文章

  1. Excel_VBA 设置单元格的字体属性(字体、字号、加粗、斜体、颜色等)
  2. 「从零入门推荐系统」08:召回算法之5类基础召回算法
  3. Dvwa之路(一、安装配置)
  4. 基于C#的ArcEngine二次开发教程(17):获取栅格属性的接口及代码实现
  5. 天梯赛——大笨钟的心情
  6. 单片机学习笔记————51单片机实现矩阵键盘的组合按键触发
  7. 电路中7个常用接口类型简要分析
  8. 2009中国最具潜力IC设计公司
  9. Firefox完全历史介绍
  10. JavaScript数组基本操作--增加、删除、截取、替换