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

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

目录

一 运行效果图展示

系统初始界面​编辑

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

​编辑模拟用户是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

相关文章

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像