软件设计模式

软件设计模式(Design Pattern,或称软件设计典范)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。设计模式代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。(摘自菜鸟教程)

下面简要介绍几个主流的软件设计模式。

MVC

全名Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。

该模式将业务逻辑、数据与界面显示分离开来组织代码,将众多的业务逻辑聚集到一个部件里面,在需要改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,达到减少编码的时间。

以下详解三部分各自的功能。

View 指用户看到并与之交互的界面。比如由html元素组成的网页界面或者软件的客户端界面。一个应用程序可能有多个界面,对应不同的用户需求,在视图中其实并没有任何的数据处理,它仅仅是用于与用户交互,得到用户的输入并传给控制器或者输出信息。

Model 指模型,表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

Controller 指控制器,接受用户的输入并调用模型和视图去完成任务。控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

下图说明了三者之间的调用关系:

例如,我们在C#下编写一个简单的用户管理程序:

Main就相当于我们的View,我们在此编写与用户的交互命令,如:

UserController uc = new UserController();Console.WriteLine("---------用户信息管理系统--------");while(true)
{Console.WriteLine("请按指示输入命令:增加-1 修改-2 删除-3 查看-4");string command = Console.ReadLine();switch (command){case "1":uc.Add();break;...}
}

当然,在Main开头,我们会实例化一个UserController对象。

在类UserController中,我们编写实现用户相应需求的方法:

class UserController
{List<User> userList = new List<User>();public void Add(){... }public void Remove(){... }    ...
}

然而,这些方法是指向User中的方法,在UserController这一层,正如上文所说,是根据View返回的用户指令,决定调用什么方法去实现,真正修改数据的方法,在User中:

class User
{private string name;private int age;public string Name { get; set;}public int Age { get; set;}public User(string name, int age){//构造方法...}}

设计模式六大原则

单一职责

一个类或者方法只有一个职责,只有一个引起它变化的原因。

里氏转换原则

以C#为例:

子类对象可以直接赋值给父类变量。
Father 对象名 = new Son();
子类对象可以调用父类成员,反之不行。
若父类对象中装的是子类对象,则可将该父类对象强行转为子类对象。

直接转换:

Son 子类对象名 = (Son) 父类对象名;

还有转换对象所属类的关键字:is和as

两者都会进行转换,若转换成功,is返回True,as返回转换后的对象,若失败,is返回False,as返回null。

bool f = 父类对象名 is Son;
Son 子类对象名 = 父类对象名 as Son;

参考资料

MVC模式简介 - 底云飞 - 博客园

软件设计模式(持续更新)相关推荐

  1. 【STM32-V7】STM32H743XIH6开发板,丰富软件资源,强劲硬件配置,大量软件解决方案持续更新中(2020-07-22)

    [STM32-V7]STM32H743XIH6开发板,丰富软件资源,强劲硬件配置,大量软件解决方案持续更新中(2020-07-22) 参考文章: (1)[STM32-V7]STM32H743XIH6开 ...

  2. 亲测好用的软件(持续更新中)

    目录 系统管理类 微软电脑管家 XMeters Geek Uninstaller 系统辅助类 Snatch WizTree Search Everything 个人管理类 MyLifeOrganize ...

  3. Java开发常用软件列表——持续更新

    Java开发常用工具列表 Typora 一款支持Markdown语法的本地文本编辑器,比较适合用来写工作日志. Clover 三叶草,可以把Windows文件夹像浏览器一样用标签组织起来,体验确实能够 ...

  4. 项目中用到的设计模式(持续更新)

    设计模式的定义:是指在软件开发中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案. 设计的六大原则: 单一职责原则(Single Responsibility Principle, ...

  5. linux安装软件的几种方式(kali平台)和一些实用的软件(持续更新)

    安装软件前我们先更改镜像源,编辑 /etc/apt/sources.list 文件, 在文件最前面添加以下条目: #中科大更新源 deb https://mirrors.ustc.edu.cn/kal ...

  6. kali上装软件gedit_linux安装软件的几种方式(kali平台)和一些实用的软件(持续更新)...

    安装软件前我们先更改镜像源,编辑 /etc/apt/sources.list 文件, 在文件最前面添加以下条目: #中科大更新源 deb https://mirrors.ustc.edu.cn/kal ...

  7. 【STM32-V7】STM32H743XIH6开发板,丰富软件资源,强劲硬件配置,大量软件解决方案持续更新中(2019-07-28)...

    说明: 争取做更多的实战性应用,分享更多的嵌入式技术,希望能在实际项目中帮到大家. (1)V7将大力加强对初学者的支持力度,已经更新至63章,下载链接,后37章和一批视频教程将加紧制作. (2)事隔五 ...

  8. -bash : xxx : command not found 新安装Linux后,安装一些必须软件(持续更新……)

    使用yum命令安装:先yum search ifconfig  查找安装包,使用yum install net-tools安装即可! 一.安装包: ifconfig (网络\IP): yum inst ...

  9. 地图下载软件(持续更新)

    GISer们在使用GIS时,常用到各种地图资源,除了测绘.购买数据外,还可以从网上找一些免费的地图资源,还有一个方法是使用一些地图下载器软件,这种软件一般都支持下载许多种地图的下载,有影像.地形.PO ...

  10. 我的几个提升工作效率的小软件(持续更新中...)

    Clipx 很好的剪贴板增强软件,码农必备 Refer: http://xbeta.info/clipx-clcl-ditto.htm Everything 速度最快的文件名搜索工具 Refer: h ...

最新文章

  1. 展望未来:使用 PostCSS 和 cssnext 书写 CSS
  2. hadoop中job.setOutputFormatClass(PartitionByCoun...
  3. 鸽主姓名查询成绩_鸽主姓名
  4. 光纤传感器实验模块_土工离心机试验专用微型光纤孔隙水压传感器
  5. 【证明】—— 斐波那契
  6. kafka/producer.lua:168: attempt to perform arithme
  7. Java 中如何实现保留两位小数 — DecimalFormat
  8. 华为交换机:基于IP子网划分VLAN
  9. 十六进制转二进制原理
  10. 切割视频——将视频截取python实现
  11. 数据模型篇:一、大数据领域建模概述
  12. Hyper-V的使用技巧及管理方法
  13. 解决iText 5.0.1生成pdf,加入iTextAsian.jar 出现异常 Font 'STSong-Light' with 'UniGB-UCS2-H'...
  14. AliOS Things的启动过程分析(一)
  15. github.com/gogo/protobu: invalid pseudo-version: revision is shorter than canonical
  16. yota3墨水屏设置_【YotaPhone2 手机使用总结】墨水屏|操作|桌面投射|第三方_摘要频道_什么值得买...
  17. TortoiseSVN客户端使用教程
  18. 今日热播-2019亚洲物联网技术博览会
  19. 护眼灯国A与国AA级差别是什么?推荐双十一值得入手的国AA的护眼灯
  20. 【C#实现文字转语音功能】

热门文章

  1. 那些年啊,那些事——一个程序员的奋斗史 ——85
  2. 少数者博弈 matlab,复杂网络中的少数者博弈研究
  3. C# ZPL打印标签
  4. ERP系统多少钱一套?不同情况详情分析告诉你!
  5. Python3中的md5加密
  6. Unity Animator人物模型动画移动偏移
  7. 使用minidwep-gtk
  8. java实习几个月没有项目组_Java实习报告总结范文3篇
  9. 任意类型变量转换成char类型——sprintf函数使用方法
  10. html中元素的几种居中方法