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

目录

一 运行效果图展示

系统初始界面​编辑

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

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

    @Override
    public double acceptMoney(double money) {
        return money*0.7;
    }}

public class CashNormal implements CashSuper {
    @Override
    public double acceptMoney(double money) {
        return money;
    }}

public class Cashsvip implements CashSuper {

    @Override
    public double acceptMoney(double money) {
        return money*0.6;
        }
}

五 优点

具有很好的可扩展性。


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

  • 25
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 28
    评论
好的,我可以为您介绍一下设计水果店销售系统的目的、功能、内容和概要。 目的: 设计一个水果店销售系统的目的是为了使水果店能够更加高效地管理和销售水果产品,提高销售业绩和顾客满意度。 功能: 水果店销售系统的主要功能包括: 1. 商品管理:包括商品信息的录入、修改、删除等操作。 2. 库存管理:实时掌握库存情况,提醒补货和报损。 3. 销售管理:实现商品销售、退货等操作。 4. 会员管理:管理顾客的信息和积分等。 5. 报表统计:生成销售报表、库存报表等。 内容: 水果店销售系统的内容主要包括以下模块: 1. 商品管理模块:包括商品信息的录入、修改、删除等操作。 2. 库存管理模块:实时掌握库存情况,提醒补货和报损。 3. 销售管理模块:实现商品销售、退货等操作。 4. 会员管理模块:管理顾客的信息和积分等。 5. 报表统计模块:生成销售报表、库存报表等。 概要: 水果店销售系统的概要包括以下几个方面: 1. 界面友好:系统界面要简洁明了,易于操作。 2. 安全性高:系统要有完善的权限控制机制,确保数据安全性。 3. 数据准确性:系统要能够实时更新数据,保证数据的准确性。 4. 稳定性强:系统要具有较高的稳定性和可靠性,确保日常销售的正常进行。 5. 扩展性好:系统要具备较好的扩展性,以适应未来水果店业务的发展和变化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值