PairProject 电梯调度 【附加题】

[附加题改进电梯调度的interface 设计, 让它更好地反映现实, 更能让学生练习算法, 更好地实现信息隐藏和信息共享。算法

目前的设计有什么缺点, 你会如何改进它? 设计模式

1.以前判断电梯是否闲置的函数不太好理解,从新修改了,以下所示:函数

        //是否停顿状态(中止的以及开门间隔>=0)
        public bool IsIdle
        {
            get
            {
                return CurrentStatus.CurrentDirection == Direction.No
                    && CurrentStatus.DoorCloseOpenTicks < 0;
            }
        }

2.原来的程序将每个电梯的target都初始化为0,感受并不合理。由于最开始电梯的状态应该是没有目标楼层的,并且在咱们的算法中target若是一开始为0,会致使重复开门的问题。因此咱们把target初始化为-1,表明电梯那时候并无目标楼层。工具

3.IElevator接口中定义的函数public bool ReqStopAt(int targetFloor) ,先看函数名很容易让人联想到这个函数的做用是是调度电梯前往目标楼层,再看它的返回值是布尔类型,也就天然想到返回值标志着是否成功到达目标楼层。但是看具体的函数时,发现这个函数其实主要做用是将targetFloor这个参数的值赋给电梯的target,修改当前方向,并未把target如何具体发生改变的过程展示出来,并且返回值标志的是是否接受调度请求。因此感受这个函数的问题要么是名字起得很差,要么是实现过程和名称不符。测试

其实这个函数的主要做用就是更新电梯状态(包括当前运行方向以及当前的目标楼层),因此咱们以为这部分代码彻底能够放到StatusUpdateForEveryTick(int ticks)这个函数里,感受这样更方便使用。spa

[附加题] 目前的这个测试程序只有命令行界面, 请给它设计UI界面, 显示乘客/电梯的运动, 并实现之。命令行

  运行时的窗体用录屏工具作成了视频,而后转成了gif,就是有点小(免费软件理解一下)……线程

                                                   

  主要的界面设计参照了上一级某Pair的设计,可是鉴于时间关系咱们只展现了电梯的运行,没有展现出乘客的状态。设计

  

  不过作到这一点已经比较纠结了,由于窗体是在主线程建立的,而TickGoes中若是想对窗体的控件进行修改的话是不容许的。参考的Pair用的方法咱们试着没有成功……最后用了委托这个东西,可是比较遗憾的是不能不能直接重复开始,要关掉重来才能够。调试

  限于时间关系关系暂时只能这样了。这一版没有上传TFS,这个没有关系吧?

  须要的话能够在博客贴出代码。 

[附加题]  阅读有关 MVC 和  MVVM 设计模式的文章。

  3.1 MVC(Model View Controller)

  即模型(model)-视图(view)-控制器(controller)。
  MVC原本是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC是将M和V的实现代码分离,从而使同一个程序可使用不一样的表现形式。好比一批统计数据你能够分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新,从例子能够看出MVC就是Observer设计模式的一个特例。

  优势:
  1) 低耦合性
  2) 高重用性和可适用性
  3) 较低的生命周期成本
  4) 快速的部署
  5) 可维护性
  6) 有利于软件工程化管理
  缺点:
  MVC的缺点是因为它没有明确的定义,因此彻底理解MVC并非很容易。使用MVC须要精心的计划,因为它的内部原理比较复杂,因此须要花费一些时间去思考。因为模型和视图要严格的分离,这样也给调试应用程序带来了必定的困难。每一个构件在使用以前都须要通过完全的测试。一旦构件通过了测试,就能够毫无顾忌的重用它们了。
  根据开发者经验,因为开发者将一个应用程序分红了三个部件,因此使用MVC同时也意味着将要管理比之前更多的文件。
  MVC并不适合小型甚至中等规模的应用程序,花费大量时间将MVC应用到规模并非很大的应用程序一般会得不偿失。
  MVC设计模式是一个很好建立软件的途径,它所提倡的一些原则,像内容和显示互相分离可能比较好理解。可是若是你要隔离模型、视图和控制器的构件,你 可能须要从新思考你的应用程序,尤为是应用程序的构架方面。若是你肯接受MVC,而且有能力应付它所带来的额外的工做和复杂性,MVC将会使你的软件在健壮性,代码重用和结构方面上一个新的台阶。
 
   3.2 MVVM
  MVVM模式和MVC模式同样,主要目的是分离视图(View)和模型(Model),有几大优势:
  1) 低耦合:视图(View)能够独立于Model变化和修改,一个ViewModel能够绑定到不一样的"View"上,当View变化的时候Model能够不变,当Model变化的时候View也能够不变。
  2) 可重用性:你能够把一些视图逻辑放在一个ViewModel里面,让不少view重用这段视图逻辑。
  3) 独立开发:开发人员能够专一于业务逻辑和数据的开发(ViewModel),设计人员能够专一于页面设计,使用Expression Blend能够很容易设计界面并生成xaml代码。
4) 可测试:界面素来是比较难于测试的,而如今测试能够针对ViewModel来写。
相关文章
相关标签/搜索