一:前言

有了上面两节的知识,尤其是第六节之后,现在我们回过头看我们的打老鼠游戏,我们是不是会发现:这个程序也太不面向对象了。我们所有的代码逻辑都分布在Code-Hide中(UI的后台代码,称之为Code-Hide)。并且,UI的后台代码又负责显示,又负责游戏逻辑的,这也直接违反了,

1:面向对象编程中的封装原则。有时候,在面向对象编程中,还有人会说到,让一个类只干一件事情,我们的前台类干的事情太多了;

2:分层原则。我们也一定听说过三层架构。等等,我们的程序跟三层架构有什么关系?容我慢慢跟你道来;

3:开闭原则。什么是开闭原则,不着急,这些所谓时髦的名字是故意弄出来吓人的,我们学习完这小节,你就自然懂得什么是开闭原则了。

好的,既然我们的小游戏出现了这么多问题,看来,现在是到了该重构我们的小游戏的时候了。

二:视频

非公开部分,请联系最课程(www.zuikc.com)。

三:小步重构之游戏逻辑独立出来

总结一下这个视频,在这个视频中,我们学到了,

1:按“意愿”去实现代码。什么是按意愿实现代码呢,大家会看到我会在一个实现还没有在代码中的时候,就已经顺着我们的逻辑将引用写好了。我会将引用或者调用写好,然后按“Shift+Alt+F10”,让VS自动去帮我们实现代码;

2:让每个类去完成自己的事情,Code-Behind只负责显示相关,GameProcessor去完成游戏相关的逻辑;

3:GameProcessor想让Code-Behind实现的事情,交给委托去做;

4:只开放必要的逻辑给外部类。比如Score这个属性,Set被设定为private;

当我们把我们的逻辑独立出来之后,在打老鼠这个游戏中,之前隐藏的那些BUG也已经不存在了。我一直不急于去修正这个BUG就是这个道理。因为我知道,我们迟早要重构这个代码,把这个代码变的漂亮一点,简单一点,到时候,我们的这个BUG也许自然就被解决掉了。

四:完善继承体系

在上一步的小步重构之中,我们将初级难度的游戏逻辑给实现了,紧接着,我们就要实现中等级以及高等级难度的游戏逻辑了,那么,我们是不是还是要在GameProcessor中去实现呢?错。

我们还记得在之前的逻辑中,对于难度的判断是通过一个枚举来实现的。当我们的代码中出现枚举的时候,我们都应该停下来好好想一想,是不是到了应该引入继承的时候了,比如,等级从简单到难的过程,我们完全可以实现为三个GameProcessor的子类。这就是开闭原则:

即,对扩展开放,对修改关闭。

这貌似有点不好理解,不妨看看我们的代码是怎么实现的吧。

我们最终实现的这些代码的UML类图如下:

五:视频

非公开部分,请联系最课程(www.zuikc.com)。

六:分层还有工厂

什么是层?实际上层这个概念并没有这么可怕。以整理衣物为例(虽然我知道很多程序员几乎从来不整理衣物,但是见总归见过吧,老婆的,妈妈的,她们总归整理过衣服),实际上,整理衣物就是一个分层的过程。我们将代码分类,丢到某个固定的位置去,就叫分层。

很多人问,什么是三层架构,无非就是数据访问的代码,放到某处,分为一层。控制逻辑或者业务逻辑,又分为一层,等等。分层实在是最基础的东西,即便是我们的小游戏,现在也到了分层的时候了。

在做这个分层的时候,我们还发现,原来我们创建各个子类的代码是可以被归类到一个叫做ProcessorFactory的类中去的,作为UI来讲,我们可以只要传入“Basic”,那么这个工厂就会为我们生成一个BasicProcessor的对象,如果传入“High”,那么就会返回HighProcessor对象。这样子,我们就不知不觉的学了一个设计模式,它叫什么呢,它就是工厂方法,它的UML类图如下:

下面这个视频我们来看看如何一步一步的实现分层以及工厂:

七:视频

非公开部分,请联系最课程(www.zuikc.com)。

八:总结

继续来总结一下该视频,除了

1:分层和工厂之外;

我们还学习到了:

1:为解决方案添加新的项目;

2:让一个项目引用另一个项目;

3:让一个项目引用FCL;

4:如何来展现我们的代码(UML);

TIP:本节的内容有点多,视频内容加起来有1个多小时,我希望通过本节的学习,我们能够掌握让代码写的相对较为整洁的技巧。我们能大致掌握分层的原则,能大致掌握封装的原则。

C#零基础入门07:打老鼠之面向对象重构相关推荐

  1. 零基础入门C 语言如何实现面向对象编程

    具体和抽象 具体:客观存在着的或在认识中反映出来的事物的整体,是具有多方面属性.特点.关系的统一: 抽象:从具体事物中被抽取出来的相对独立的各个方面.属性.关系等. 以 Person 为例:" ...

  2. 【Python零基础入门篇 · 24】:面向对象的多态、静态方法和类方法

    文章目录 面向对象的多态 第一种多态展示 第二种多态展示 静态方法和类方法 静态方法 类方法 例1:在实例方法中访问类属性 例2:在类方法中访问类属性 总结 面向对象的多态 多态特征:一个对象具有多种 ...

  3. Python零基础入门(四)——Python面向对象编程[学习笔记]

    一.定义 1.面向对象编程(OOP) 面向对象编程(Object-oriented Programming,简称OOP)是一种编程范例,它提供了一种结构化程序的方法,以便将属性和行为捆绑到单个对象中. ...

  4. python零基础能学吗 知乎-如何零基础入门 Python?

    从17年6月入门Python到今天有大半年了,总结一下这半年来自学Python的路径. 本人只在两年前接触过HTML和CSS,但严格来说这两门只能算是标记语言而非编程语言,而且开始学Python的时候 ...

  5. 什么是python中子类父类_零基础入门:python中子类继承父类的__init__方法实例

    前言: 今天为大家带来的内容是零基础入门:python中子类继承父类的__init__方法实例!具有不错的参考意义,希望在此能够帮助到各位!(喜欢的话记得点赞转发关注不迷路哦) 使用Python写过面 ...

  6. 【天池赛事】零基础入门语义分割-地表建筑物识别 Task4:评价函数与损失函数

    [天池赛事]零基础入门语义分割-地表建筑物识别 Task1:赛题理解与 baseline(3 天) – 学习主题:理解赛题内容解题流程 – 学习内容:赛题理解.数据读取.比赛 baseline 构建 ...

  7. 七天LLVM零基础入门(Linux版本)------总结

    七天LLVM零基础入门这系列文章,为了让刚接触LLVM的人在最短的时间内快速的熟悉LLVM.这系列文章,现在经过将近一年的时间的使用,有了不少反馈的意见,现在将这些情况总结一下. 1. 在按照这个七天 ...

  8. 基于实践的LabVIEW零基础入门视频教程

    原文地址::http://blog.eeecontrol.com/LabVIEW1/ <基于实践的LabVIEW零基础入门视频教程> 资料不在多,而在于精,资料太多,反而会迷失方向,学习最 ...

  9. C# 零基础入门知识点汇总

    C# 零基础入门 知识点汇总 前言 一,基础语法(1~10) 二,流程控制(11~20) 三,数组相关(21~30) 四,函数介绍(31~40) 五,类和对象(41~50) 六,面向对象(51~60) ...

最新文章

  1. (转)Sublime Text2 快捷键汇总
  2. 独家 | 教你用Python来计算偏差-方差权衡
  3. 怎么打断点_搞笑段子: 有次相亲, 双方父母都在, 我坐下就给自己点了支烟
  4. Matchme php script_apache php-fpm Primary script unknown\n - TechBlog
  5. 亚马逊给警察局装备了人脸识别系统就万事大吉了?没那么容易
  6. 蓝桥杯:算法训练之最大最小公倍数
  7. EOF是什么?(转)
  8. request download - 两个队列的研究
  9. linux挂载iso文件
  10. 请使用复选框选择_使用可选是可选的
  11. POJ 1422 Air Raid (最小路径覆盖)
  12. Hanlp之理解用户自定义词典(java版本)
  13. Airflow 中文文档:插件
  14. 下载所有需要的rpm文件路径
  15. Java编程ture找不到符号,为什么会出现这样的错误呢
  16. 设计模式之GOF23原型模式02
  17. 14.13. wireless
  18. 计算机专业笔记本需要小键盘吗,笔记本小键盘数字键不能用 并点击解除锁定...
  19. 代数学笔记1: 域扩张(一)
  20. oracle系统FA调整折旧年限,Oracle财务管理系统培训手册.doc

热门文章

  1. 电子书下载:ASP.NET 2.0 Revealed.chm
  2. 易飞erp怎么修改服务器ip,易飞连接失败处理方法
  3. linux下的删除文件命令,Linux下删除文件命令
  4. 图像预处理(二值化)
  5. 2.1.4 字符与字符串编码
  6. 无线电流互感器监测电机设备的运行(OEE,开关机率)工作状态
  7. 虚拟网站禁用php,虚拟主机配置,建议禁止php函数列表,禁用不安全的PHP函数
  8. 联发科4G方案渐趋成熟 2016市场或将迎来大反转
  9. postman格式化
  10. [附源码]JAVA毕业设计评标专家管理信息系统(系统+LW)