停车场管理系统-----软件构造习题课代码分析

本文分析了停车场管理系统的软件构造,涉及ADT设计、静态工厂方法、面向复用设计、State模式、Decorator模式和Visitor模式。通过扩展基础类和接口,实现了不同交通工具的停放、状态管理以及功能扩展,确保了代码的复用性和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

在这里插入图片描述
在这里插入图片描述

软件框架:

在这里插入图片描述

ADT设计:

  • 静态工厂方法
	/**
	 * 创建一个新的停车场
	 * 
	 * @param nos 各停车位的编号,均为自然数,且无重复
	 * @param widths 各停车位的宽度,包含的元素数量=nos中元素数量 且>=5 
	 * @return 一个停车场对象,包含了widths.length个车位,各车位的宽度与nos中相应数字一致,且各车位上均未有停车
	 * @throws 如果违反nos和widths不合法
	 */
	public static ParkingField create(int[] nos, int[] widths) throws Exception {
   
		return new ConcreteParkingField(nos, widths);
	}

创建一个新的停车场。

  • 停车:
/**
	   * 在某个停车位上停车
	   * 车牌号为plate的车辆,之前没停在车场,执行后停在了车位号为num的车位上,该车位宽度大于车宽度
	   * 其他车位的状态不变
	 * 
	 * @param plate  要停进来的车辆车牌号,not null
	 * @param width  车的宽度,自然数
	 * @param num 	  指定的停车位编号,自然数
	 * @throws 如果plate车已经停在该停车场,或者num车位已被其他车占用,或者num车位宽度不超过width,或者num并不是合法车位
	 */
	public void parking(String type, String plate, int width, int num, String[] extraRegistrationInfo) throws Exception;
  • 驶离停车场:
	/**
	   * 将汽车驶离停车场,plate车原来占用的车位空出来了,计算出本次停车的费用(半小时10元,不足半小时按半小时计算)
	 * 
	 * @param plate 待驶离的车辆,not null
	 * @return 本次停车的费用(精确计算得到)
	 * @throws plate车并没有停在本车场
	 */
	public double depart(String plate) throws Exception;
  • 停车场状态:
	/**
	   * 返回当前停车场每个车位的状态(空,或被某车占用)
	 * 
	 * @return Key为停车位的编号,Value为该车位上的车辆车牌号。如果停车位上无车辆,则对应的Value为“”
	 */
	public Map<Integer, String> status();

以上是核心方法,其他辅助性的方法不再说明。
方法的实现都十分简单,并不是软件构造课的主要内容,故对其逻辑不一一说明。

面向复用的设计:

相机场等,本质上和停车场的功能完全一样,所以我们设计的ADT如果有很好的复用性的话,只需经过少量的扩展,就可以实现一个更加复杂的场景下的类。

  • 我们首先将Car扩展成Parkable,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值