软件设计大作业 水果店打折系统 应用三种设计模式

本文主要是介绍软件设计大作业 水果店打折系统 应用三种设计模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一 运行效果图展示

系统初始界面​编辑

​编辑模拟用户是普通顾客

​编辑模拟用户是vip顾客

​编辑模拟用户是svip顾客

​编辑模拟同时购买多种水果

二 需求分析

需求分析

三 设计模式及类图

选用设计模式

单例方法模及其实现类

2 简单工厂模式及其实现类

3.策略模式及其实现类

四 部分代码展示

五 优点


一 运行效果图展示

  1. 系统初始界面


  1. 模拟用户是普通顾客


  1. 模拟用户是vip顾客


  1. 模拟用户是svip顾客


  1. 模拟同时购买多种水果

二 需求分析

  1. 需求分析

运用单例模式实现每一个客户打开界面时首先显示“欢迎光临”,用来模拟客户来到水果店,服务员的行为。

水果店销售四种水果:苹果、香蕉、橘子、芒果。单个水果的价格分别是4元、2元、3元、5元。运用简单工厂模式可以很好的解决这一问题。

水果店对于不同的顾客结账时,会有不同的优惠方案, 普通用户支付原价,vip用户打7折,svip用户打6折,优惠不可同时叠加使用。优惠方案未来可能会有变动,运用策略模式可以很好的解决这一问题。

三 设计模式及类图

  1. 选用设计模式

 根据需求分析描述水果店打折系统可以采用三种设计模式:

打开界面后显示“欢迎光临”采用了单例模式,一个客户只能实例化一种;水果店生产苹果、香蕉、橘子、芒果采用了简单工厂模式;结账时根据不同类型的客户优惠方式不同采用了策略模式。

  1. 单例方法模及其实现类

  • 模式定义

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

  • 模式结构

创建一个 SingleObject 类。SingleObject 类有它的私有构造函数和本身的一个静态实例。SingleObject 类提供了一个静态方法,供外界获取它的静态实例。SingletonPatternDemo 类使用 SingleObject 类来获取 SingleObject 对象。


  • 类图如图3所示

2 简单工厂模式及其实现类

  • 模式定义

创建一个 SingleObject 类。SingleObject 类有它的私有构造函数和本身的一个静态实例。

SingleObject 类提供了一个静态方法,供外界获取它的静态实例。SingletonPatternDemo 类使用 SingleObject 类来获取 SingleObject 对象。

  • 模式结构

水果工厂:Fruit_factory

抽象水果:Fruit

具体水果:Fruit_apple,Fruit_banana,Fruit_mango,Fruit_orange

  • 类图如图4所示


4 简单工厂模式类图

3.策略模式及其实现类

  • 模式定义

在策略模式中,定义一系列优惠方法,将每一个方法封装起来,让它们可以相互替换,让方法独立于使用它的客户而变化。一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

  • 模式结构

抽象策略类:CashSuper

具体策略类:CashNormal,Cashvip,Cashsvip

  • 类图如图5所示


5 策略模式类图

四 部分代码展示

public class SingletonPatternDemo {public static void main(String[] args) {//获取唯一可用的对象SingleGuest object = SingleGuest.getInstance();//显示消息object.showMessage();}
}
//工厂类:
class Fruit_Factory{public static Fruit createFruit(String type) throws UnsupportedShapeException { Fruit fruit; if ("苹果".equals(type)) { fruit = new Fruit_apple(); } else if ("香蕉".equals(type)) {fruit = new Fruit_banana(); } else if ("芒果".equals(type)) { fruit = new Fruit_mango();         } else { fruit = new Fruit_orange(); } return fruit;}}public interface Fruit {//抽象产品类public void product();}public class Fruit_apple implements Fruit{public void product(){System.out.println("拿走苹果");}
}
public class Fruit_banana implements Fruit{public void product(){System.out.println("拿走香蕉");}}
public class Fruit_mango implements Fruit{public void product(){System.out.println("拿走芒果");}}public class Fruit_orange implements Fruit{public void product(){System.out.println("拿走橘子");}
}
 //策略模式实现打折
public class CashContext {CashSuper cashSuper;public CashContext(String type) {//传入打折或返现类型switch (type) {case "normal":cashSuper = new CashNormal();break;case "vip":cashSuper = new Cashvip();break;case "svip":cashSuper = new Cashsvip();break;}this.cashSuper = cashSuper;}public CashContext(){cashSuper = new CashNormal();}public CashContext(double rebate){cashSuper = new Cashvip();}public CashContext(double moneyCondition,double moneyReturn){cashSuper = new Cashsvip();}public double acceptMoney(double money){return  cashSuper.acceptMoney(money);
}
}interface CashSuper {double acceptMoney(double money);}class Cashvip  implements  CashSuper{@Overridepublic double acceptMoney(double money) {return money*0.7;}}public class CashNormal implements CashSuper {@Overridepublic double acceptMoney(double money) {return money;}}public class Cashsvip implements CashSuper {@Overridepublic double acceptMoney(double money) {return money*0.6;}
}

五 优点

具有很好的可扩展性。


有不足之处欢迎大家指正!

这篇关于软件设计大作业 水果店打折系统 应用三种设计模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/807221

相关文章

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Java中的Lambda表达式及其应用小结

《Java中的Lambda表达式及其应用小结》Java中的Lambda表达式是一项极具创新性的特性,它使得Java代码更加简洁和高效,尤其是在集合操作和并行处理方面,:本文主要介绍Java中的La... 目录前言1. 什么是Lambda表达式?2. Lambda表达式的基本语法例子1:最简单的Lambda表

Python结合PyWebView库打造跨平台桌面应用

《Python结合PyWebView库打造跨平台桌面应用》随着Web技术的发展,将HTML/CSS/JavaScript与Python结合构建桌面应用成为可能,本文将系统讲解如何使用PyWebView... 目录一、技术原理与优势分析1.1 架构原理1.2 核心优势二、开发环境搭建2.1 安装依赖2.2 验

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

如何将Python彻底卸载的三种方法

《如何将Python彻底卸载的三种方法》通常我们在一些软件的使用上有碰壁,第一反应就是卸载重装,所以有小伙伴就问我Python怎么卸载才能彻底卸载干净,今天这篇文章,小编就来教大家如何彻底卸载Pyth... 目录软件卸载①方法:②方法:③方法:清理相关文件夹软件卸载①方法:首先,在安装python时,下

SpringShell命令行之交互式Shell应用开发方式

《SpringShell命令行之交互式Shell应用开发方式》本文将深入探讨SpringShell的核心特性、实现方式及应用场景,帮助开发者掌握这一强大工具,具有很好的参考价值,希望对大家有所帮助,如... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析