18不使用委托实现能自动侦测车距的智能汽车
发明一辆智能汽车,能自动侦测与前方车辆的车距,当车距小于100米的时候,就报警。
□ 思路
● 报警器显然是观察者
● 智能汽车就是被观察者
智能汽车有一个侦测车距的方法,当车距小于100米的时候,就触发一个事件。这个事件就遍历所有注册的观察者,让每个观察这作出响应。
被观察者接口只负责注册和取消注册。
1: //被观察者接口
2: public interface IObservable
3: {
4: void Register(IObserver obj);
5: void Unregister(IObserver obj);
6: }
观察者接口也只有一个行为。
1: //观察者接口
2: public interface IObserver
3: {
4: void Update();
5: }
还需要一个被观察者抽象基类实现被观察者接口,他维护了一个被观察者的集合,并实施注册、取消注册和通知观察者,通知观察者的方法涉及为virtual,需要抽象类的子类来触发。
1: //被观察者抽象基类
2: public abstract class SubjectBase : IObservable
3: {
4: private List<IObserver> container = new List<IObserver>();
5:
6: public void Register(IObserver obj)
7: {
8: container.Add(obj);
9: }
10:
11: public void Unregister(IObserver obj)
12: {
13: container.Remove(obj);
14: }
15:
16: protected virtual void Notify()
17: {
18: foreach (IObserver observer in container)
19: {
20: observer.Update();
21: }
22: }
23: }
24:
智能汽车就继承了被观察者这个抽象基类,他不仅有测距的方法,还有当车距小于100米时触发事件,触发事件的实质就是调用被观察者抽象基类的通知方法,让观察者作出响应。
1: public class SmartCar : SubjectBase
2: {
3: private string brand = string.Empty;
4: private string type = string.Empty;
5: private int distance;
6:
7: public SmartCar(string brand, string type)
8: {
9: this.brand = brand;
10: this.type = type;
11: this.distance = 1000;
12: }
13:
14: public string Brand {get { return brand; }}
15: public string Type {get { return type; }}
16:
17: public SmartCar():this("大众","Polo"){}
18:
19: protected virtual void OnDistance()
20: {
21: base.Notify();//也就是遍历观察者,让观察者对动作有响应
22: }
23:
24: public void DetectDistance()
25: {
26: for (int i = 200; i > 98; i--)
27: {
28: distance = i;
29: if (distance < 100)
30: {
31: OnDistance();
32: }
33: }
34: }
35: }
36:
37: 报警器就是观察者,只需要作响应。
38:
39: public class Alarm : IObserver
40: {
41: public void Update()
42: {
43: Console.WriteLine("嘀嘀嘀:与前方车距小于100米,请保持好车距!");
44: }
45: }
46:
主程序先让被观察者注册观察者,然后运行被观察者的方法,当车距小于100米,就触发被观察者的通知方法,实际上调用的是被观察者抽象基类的虚方法,挨个通知观察者作出响应。
1: class Program
2: {
3: static void Main(string[] args)
4: {
5: SmartCar smartCar = new SmartCar();
6: Alarm alarm = new Alarm();
7:
8: smartCar.Register(alarm);
9: smartCar.DetectDistance();
10: Console.ReadKey();
11: }
12: }
13:
14:
15:
结果:
18不使用委托实现能自动侦测车距的智能汽车相关推荐
- 如何判断车距:车距判断技巧图解
如何判断车距?大部分新手在刚开始驾驶汽车的时候都会遇到判断车距的困难.下面小编将详细讲述一下各种判断车距的方法. 判断后车距离,确定是否能够变线. 判断隔壁车道的车子位于我们驾驶车辆侧后方多远,我们一 ...
- 2018智能汽车盘点,新旧造车势力的智能化PK
现在一提起手机,人们脑海中的第一印象肯定不是以前那个只可以打电话发短信的手机了,而是集多种功能于一身的智能手机. 手机已经从功能手机进化成了智能手机,目前这种智能化的趋势从手机上开始延伸到汽车上,越来 ...
- 2018智能汽车盘点,新旧造车势力的智能化PK 1
现在一提起手机,人们脑海中的第一印象肯定不是以前那个只可以打电话发短信的手机了,而是集多种功能于一身的智能手机. 手机已经从功能手机进化成了智能手机,目前这种智能化的趋势从手机上开始延伸到汽车上,越来 ...
- 【项目实践】车距+车辆+车道线+行人检测项目实践
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自 | AI算法与图像处理 1.项目流程的简介 项目的主题框 ...
- 全国大学生智能车竞赛2022年-智能汽车竞赛发展沙龙
2022年智能车竞赛技术沙龙 01 技术研讨会 一.背景介绍 第十八届全国大学生智能车竞赛技术研讨会 将于2022年10月29日举行. 原定是在深圳科创学院举行, 后因防疫要求,竞赛改在线上举行. ...
- 教你巧用后视镜判断车距
后视镜判断车距的方法 我们在驾驶机动车的时候要注意时刻观察后视镜,要从后视镜观察路况.那么如何从后视镜判断车距?下面看看元贝驾考的小编给大家好好介绍一下. 如何调节外后视镜? 关于后视镜的调整目前并没 ...
- 第十八届全国大学生智能汽车竞赛 航天智慧物流创意组-线上赛多车协同侦察
第十八届全国大学生智能汽车竞赛 航天智慧物流创意组-线上赛多车协同侦察 1.任务综述 使用Gazebo环境搭建出模拟模式军事仿真环境,环境中包含建筑物.道路.特殊军事标识.特殊物体等物品.使用三辆 ...
- 车企纷抢无人驾驶赛道,中国智能汽车确定将立法
中国将在智能汽车领域立法,众多企业纷纷加快无人驾驶汽车的战略部署. 9月9日,国家发展改革委(下称"发改委")产业协调司处长吴卫在2017中国汽车产业发展(泰达)国际论坛上表示,根 ...
- 第十七届智能汽车竞赛-多车编队组入门讲解
从单车到双车追逐,从双车追逐到双车超越,从双车超越到双车接力,从双车接力到多车编队,智能车变革从未停下脚步,参赛同学们又该如何高效准备并顺利完成比赛任务呢?
最新文章
- Owncloud-X安装配置
- 1.3计算机的性能指标
- 我犯的错误--关于数据库类型不对
- Kubernetes系列之Helm介绍篇
- JavaScript函数作用域
- python伪造邮件发件地址_Python:向多个地址发送电子邮件
- vs解决方案中添加文件夹
- cocos2d-x将背景色改为白色
- Eclipse中使用SVN Eclipse配置SVN
- 用于应用开发的新数据可视化模板
- hugo搭建个人博客
- 【渗透测试笔记】之【免杀工具——ScareCrow】
- 门禁系统一定要服务器吗,门禁系统服务器功能配置
- 视频直播APP源码开发iOS音频播放流程
- 你要知道的测试面试题
- 【paper】DenseFusion: 6D Object Pose Estimation by Iterative Dense Fusion 6D姿态估计
- html垂直线性渐变,CSS线性渐变 垂直和水平渐变linear-gradient
- java宠物王国_宠物王国单机版
- 完全自制的五子棋人机对战游戏(VC++实现)
- 支持向量机基本原理与思想
热门文章
- 无生命的AI算不上「智能」
- 物理学需要哲学,哲学需要物理学
- IBM的医疗AI为何失败
- 黄仁勋的“数据梦” 英伟达豪掷69亿美金虎口夺食
- 智能驾驶是否会“运动式”发展
- 扎克伯格|在美国国会数据门听证会上的证词-中英文全文
- 22 岁专访库克、B 站 3 天涨粉百万,他将毕设树莓派扫描仪升级,繁星散落在校空!...
- 乔布斯 18 岁求职信拍卖价 22.24 万美元,值吗?
- 面试官:因为这个语言,我淘汰了90%的人!!
- 林丹退役,用 Python 看看大家怎么说?