ood的5C解题法(1)----管理类面试对象设计

news2024/10/5 19:17:36

管理类

概念

可以模拟/代替管理员日常工作的系统
下面用停车场系统做演示

答题流程

  • Clarify
    • What:除题目中的名词外,从管理的名词考虑
      1. parking lot是什么类型的?如果楼有多层,停车位也是多层,则parking lot->parking level->parking space->upper/lower space
      2. parking lot 管理什么?vehicle/parking spot
      3. vehicle/parking spot有什么类型?公交车/摩托/轿车,残疾人车位/卡车车位…
    • How:
      1. 如何停车?显示出每一层剩余车位的数量
      2. 免费还是付费?如何收费?根据时间收费
  • Core object:有进有出,思考这个系统的input/output,并考虑其中的映射关系在这里插入图片描述
    • input:bus/car/motorcycle
      1. 不建议在parking lot中加- List<Car> cars的三个原因:不需要知道parkinglot中有什么车(不必要)、parkinglot会和car建立dependency,parkinglot不应该依赖于car而存在(不必须)、parkinglot是静态元素而车是动态元素,会不断修改其中的List(动态关系)
      2. 使用一个单独的ticket类保存car和parking lot的关系
    • output:parking spot
      1. parking lot和parking spot是静态关系,parking lot依赖于parking spot,当parking spot发生变化时parking lot也要发生变化
  • use Case:从停车场的角度进行思考
    • Reservation: X
    • Serve: park vehicle / get available count
    • Check out: clear spot / calculate price
      1. Parking lot find the spot to clear
      2. update spot to be available
      3. update available count for each level
  • Class:设计类图时可以使用ticket的形式保管信息
    • 如何获取每一层的剩余空位数?反面:在ParkingLot类中定义int floor1; int floor2;....,违背了可扩展性。应当新建一个level类,在ParkingLot中使用List<Level> level;
    • ParkingLot应当依赖于抽象类而不是具体类
      在这里插入图片描述
  • Correctness:
    • validate use cases
    • follow good practice(eg.停车场已停满)
    • S.O.L.I.D
    • Design pattern
      1. Singleton Design Pattern: ensure a class has only one instance, and provide a global point of acess to it.
// 1
public class ParkingLot{
	private static ParkingLot _instance = null;
	private List<Level> levels;

	private ParkingLot(){
		levels = new ArrayList<Level>();
	}
 
	public static synchronized ParkingLot getInstance(){
		if(_instance == null){
			_insatnce = new ParkingLot();
		}
		return _instance;
	}
}
// 2
public class ParkingLot{
	private ParkingLot(){}
	
	private static class LazyParkingLot{
		static final ParkingLot _instance = new ParkingLot();
	}

	public static ParkingLot getInstance(){
		return LazyParkingLot._instance;
	}
}

根据类图写代码

在这里插入图片描述

迪米特法则(law of demeter)

each unit should have only limited knowledge about other units: only unit “closely” related to the current unit. Each unit should only talk to its frients; don’t talk to strangers.

// bad
obj.getx().gety().getz().do();
//good
obj.doSomeThing();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/661474.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows Server 2019 OVF, updated Jun 2023 (sysin) - VMware 虚拟机模板

Windows Server 2019 OVF, updated Jun 2023 (sysin) - VMware 虚拟机模板 2023 年 6 月版本更新&#xff0c;现在自动运行 sysprep&#xff0c;支持 ESXi Host Client 部署 请访问原文链接&#xff1a;https://sysin.org/blog/windows-server-2019-ovf/&#xff0c;查看最新…

5、产品经理的工作职责OR主要工作技能和工具

1、产品经理的工作职责 我们通过一个案例来了解产品经理的工作职责。 老板让你给他点餐&#xff0c;你应该怎么做&#xff1f;你需要考虑哪一些方面的问题&#xff1f; 例如&#xff1a;你预算多少&#xff0c;预算是十块钱还是100块还是1000块。有没有忌口&#xff0c;口味…

【MYSQL篇】Update语句原理详解

文章目录 前言缓冲池Buffer PoolInnoDB 内存结构redo logundo logBinlog 总结 前言 前面的文章我们已经对MySQL的查询语句的执行流程进行了说明&#xff0c;感兴趣的可以去看看&#xff1a; 【MySQL篇】Select语句原理详解 本篇文章我们来聊聊 MySQL更新语句的执行原理。更新…

Win7系统提示Windows Defender无法扫描选定的文件解决方法

Win7 64位系统提示“Windows Defender无法扫描选定的文件”怎么办呢?使用Windows Defender扫描文件,结果弹出如下图窗口,该怎么解决呢,参考下文,一起来解决Win7系统提示“Windows Defender无法扫描选定的文件”的解决方法。 原因分析: 这是因为开启Defender扫描压…

java的序列化注解Serial、序列化版本号serialVersionUID

例如&#xff0c;jdk源码NTLMException类的定义&#xff0c;其中涉及到了序列化注解Serial和序列化版本号字段serialVersionUID&#xff1a; 序列化注解java.io.Serial&#xff1a; 序列化注解java.io.Serial是在javaSE-14版本引入的。通常注解实现了序列化类的序列化相关的函…

【JUC进阶】02. volatile关键字

目录 1、回顾JMM 1.1、可见性&#xff08;Visibility&#xff09; 1.2、原子性&#xff08;Atomicity&#xff09; 1.3、有序性&#xff08;Ordering&#xff09; 2、volatile 2.1、保证可见性 2.2、不保证原子性 2.3、防止指令重排 2.4、什么时候使用volatile 3、小…

微服务中「组件」集成

有品&#xff1a;There is no silver bullet&#xff1b; 一、简介 在微服务工程的技术选型中&#xff0c;会涉及到很多组件的集成&#xff0c;最常用包括&#xff1a;缓存、消息队列、搜索、定时任务、存储等几个方面&#xff1b; 如果工程是单服务&#xff0c;对于集成组件…

有趣的数学 关于自然常数e

一、e的值 自然常数&#xff08;也称欧拉数&#xff09;e是数学中最重要的数字之一。 2.7182818284590452353602874713527...... 二、从复利理解e 设想你在一家银行有一个银行账户&#xff0c;该银行付给你一个慷慨的利息年利率12%,一年计一次复利&#xff0e;你将一笔初始存款…

测试(二)

1.软件测试的生命周期 需求分析→测试计划→ 测试设计→ 测试开发→ 测试执行→ 测试评估 2.如何描述一个Bug 3.Bug的优先级 1、Blocker&#xff08;崩溃&#xff09;&#xff1a; 阻碍开发或测试工作的问题&#xff1b;造成系统崩溃、死机、死循环&#xff0c;导致数据库数…

Windows Server 2016 OVF, updated Jun 2023 (sysin) - VMware 虚拟机模板

2023 年 6 月版本更新&#xff0c;现在自动运行 sysprep&#xff0c;支持 ESXi Host Client 部署 请访问原文链接&#xff1a;https://sysin.org/blog/windows-server-2016-ovf/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org…

Kubernetes 纯理论 贼干篇

Kubernetes理论 docker 容器引擎 docker compose 单机编排工具 docker swarm Docker容器多机编排工具&#xff0c;实现Docker容器的集群管理调度的工具 k8s 容器多机编排工具&#xff0c;占据80%以上的市场份额 mesos marathon mesos:分布式资管管理框架&#xff0c;可以对…

2019年全国硕士研究生入学统一考试管理类专业学位联考写作试题

写作:第56&#xff5e;57小题&#xff0c;共65分。其中论证有效性分析30分&#xff0c;论说文35分。 56&#xff0e;论证有效性分析 分析下述论述中存在的缺陷和漏洞&#xff0c;选择若干要点&#xff0c;写一篇600字左右的文章&#xff0c;对论证的有效性进行分析和评论。(论…

Linux终端与进程的关系 ( 1 ) -【Linux通信架构系列】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the…

案例:从定性原因分析上升到定量原因分析

在定量原因分析时&#xff0c;主要是有四种定量思考的方法&#xff1a; 1、数据的居中趋势与离散程度分析&#xff1a;均值、标准差 2、 80-20分析&#xff1a;在所有的构成成分中&#xff0c;哪个成分占比最大 3、数据的相关性分析&#xff1a;是否存在强相关 4、敏感性分…

[进阶]Java:文件字符输入流、文件字符输出流

问&#xff1a;字节流读取中文输出可能会存在什么问题&#xff1f; 会乱码。或者内存溢出。 读取中文输出&#xff0c;哪个流更合适&#xff0c;为什么&#xff1f; 字符流更合适&#xff0c;最小单位是按照单个字符读取的。 代码演示如下&#xff1a; public class FileR…

[C++]vs2019运行c++报错:错误 C1075 “{”: 未找到匹配令牌

源码是从git拉下来的&#xff0c;但是我并没有改任何东西&#xff0c;结果报错超过100个&#xff0c;这个很明显不是代码问题&#xff0c;最后发现需要把LF换成CRLF&#xff0c;修改方法很简单&#xff0c;就是VS2019打开源代码右下角切换即可。如图 错误原因就是github下载的源…

【MySQL】不就是MySQL——多表查询

前言 嗨&#xff01;小伙伴们大家好呀&#xff0c;忙碌的一周就要开始&#xff01;在此之前我们学习的MySQL数据库的各种操作都是在一张表之中&#xff0c;今天我们学习要对多张表进行相关操作&#xff0c;相比较于单一的表来说&#xff0c;多张表操作相对复杂一些&#xff0c;…

【数据库三】数据库的存储引擎

存储引擎 1.存储引擎1.1 概念介绍1.2 常用存储引擎 2.MyISAM2.1 特点介绍2.2 支持的存储格式2.3 适用的生产场景 3.InnoDB3.1 特点介绍3.2 适用生产场景分析4.企业选择存储引擎依据 5.MyISAM和InnoDB的区别命令操作 1.存储引擎 1.1 概念介绍 MySQL数据库中的组件&#xff0c;负…

深层神经网络

1、深层网络中的前向传播 一个训练样本 x 前向传播 第一层需要计算 &#x1d467; [1] &#x1d464;[1]&#x1d465; &#x1d44f; [1]&#xff0c;&#x1d44e; [1] &#x1d454; [1] (&#x1d467; [1] )&#xff08;&#x1d465;可以看做 &#x1d44e; [0] &am…

软件工程导论期末救急包(中)

目录 用户需求 需求分析常用的分析方法 软件设计 创建良好设计的原则 内聚性 耦合性 UML中各种视图及其作用 用例视图VS逻辑视图 UML中的主要图及其作用 软件开发过程与UML可视化建模 MVC模式 MVVM模式 面向对象模型主要哪些模型组成&#xff1f; 概要设计阶段的基本任务是什…