![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 83
郝伟博士
郝伟,男,留日计算机博士,副研究员,硕士生导师。师从东京大学松崎公纪教授,主要研究方向为网络安全、并行计算与大数据,尤其是在网络环境下大数据安全性的研究。北京华云安信息技术有限公司首席研究员,中新网安技术研究员,上海莱镁晟信息科技有限公司技术顾问。参与国家973项目和国家科技重大专项各1项,主持国家科研项目1项,13项国家发明专利,各类论文25篇,合肥市政认定高层次人才。与清华大学、海克斯康、国防科技大学等多家单位有技术合作。
展开
-
合成复用原则(Composite Reuse Principle)
本文通过一个实例介绍了合成复用原则。其核心思想是将一些功能一致的子功能(属性和方法)合成为一个单独的模块(类),然后在主类中调用这个模块即可。复用合成原则能够为需求变更带来很大的设计灵活性,同时也能够有效地降低主类的复杂度,在实际的项目中应该充分利用。原创 2019-12-25 07:35:44 · 994 阅读 · 0 评论 -
迪米特法则(LOD:Law of Demeter)
简介迪米特法则又叫作最少知识原则(Least Knowledge Principle,LKP),产生于 1987 年美国东北大学(Northeastern University)的一个名为迪米特(Demeter)的研究项目,由伊恩·荷兰(Ian Holland)提出,被 UML 创始者之一的布奇(Booch)普及,后来又因为在经典著作《程序员修炼之道》(The Pragmatic Program...原创 2019-09-07 16:39:42 · 921 阅读 · 0 评论 -
解决DataGridView回车后自动下移一行的问题
问题描述DataGridView是一个很常用的数据控件,不仅可以用于二维数据的显示,同时还可以方便地进行编辑。一般控件越强大,往往也意味着它的结构很复杂,从而会有一些使用的问题。在DataGridView控件中,相信大多数使用者都会遇到一个问题就是:在单元格编辑后焦点会自动向下移动一格。在网上有很多文章都提出了重写 ProcessCmdKey 来解决,并且给出了相应的代码,但是这些重写都是在窗...原创 2019-08-26 15:58:04 · 4076 阅读 · 0 评论 -
接口隔离原则 (ISP:Interface-Segregation Principle)
定义ISP根据GoF中原文定义如下Clients should not be foreced to depend on methods that they do not used.即 客户端不应该强制依赖于它们所不使用的方法。否则的话,客户端将会因为这些方法的变更也需要做相应的调整,也就是说,会造成需要做多余且无用的工作。实例演示以数据库操作为例,请看以下接口的定义。public ...原创 2019-08-12 18:33:51 · 682 阅读 · 0 评论 -
关于this指针的使用注意事项详解
this 指针简介在面向对象的程序设计语言中,都有一个默认的this关键字。这个关键字的作用就是代表当前对象,可以通过 this 引用所有的类内的全局变量或方法。但是 this 指针在使用的时候,有很多要注意的地方,如果不注意的话,会造成滥用带来未知的麻烦。使用限制只能在非静态方法中使用,包括普通方法和构造函数;可以引用所有的类的成员,包括字段和方法;只能在方法体内使用,包括普通方法和...原创 2019-08-25 20:09:58 · 905 阅读 · 0 评论 -
一个简单的类实现C#配置窗体中所有配置值变化的监听(附源代码)
文章目录问题描述解决方案第1步:获得所有控件第2步:对需要监控的控件进行处理使用方法注意事项附录:源代码问题描述在配置窗体中,为了更好地提高用户体验,当某个值发生变化时,需要向用户提供是否保存。如果没有变化则不需要。举例说明。如下图所示,在这个界面有四配置内容:通用参数配置、压力源配置、温度配置和传感器配置。在每类配置中,又有很多具体的配置项。左上角的保存默认是灰色的,如果修改了任何一个值,那...原创 2019-08-24 14:00:54 · 2669 阅读 · 1 评论 -
依赖倒置原则(DIP: Dependency Inversion Principle)
文章目录定义分析理解抽象与实现依赖高层与低层依赖倒置原则总结定义DIP在Wikipedia的定义如下。High level modules should not depend upon low level modules,Both should depend upon abstractions.Abstractions should not depend upon details.Deta...原创 2019-08-10 11:16:49 · 653 阅读 · 0 评论 -
原型模式(Prototype)
定义原型模式是构造实例的一种常见方法。我们在创建对象的时候,除了使用 new 以外,还有一种方式就是直接从一处实例中创建新对象的克隆对象。原型模式就是从一个对象(即原型)再创建一个新对象(克隆体)的一种方式。克隆体在创建的过程中会完全保留原型的所有状态,并且克隆方法在对象中实现,可以隐藏创建的细节,为调用带来方便。实例说明在工业生产的质量管理领域,零件数据测量是一项非常基础的工作。现场的工人...原创 2019-08-07 20:19:57 · 531 阅读 · 0 评论 -
小技巧:利用 MemberwiseClone() 简化 C# 中 Clone() 深克隆代码
前言在单例模式的应用场景中,Clone() 方法会大量使用,我们在写代码的时候经常会写很多的代码,用于字段或属性的复制,这样的操作不仅麻烦,而且在变更时也不易于修改。实际上我们有更简单的方法,现在就以一个实例来解释这个技巧。示例class Student{ public int ID {get; set;} = 0; public string Name {get; set...原创 2019-08-19 15:43:49 · 2536 阅读 · 0 评论 -
超简单的枚举类型与ComboBox动态关联方法
需求在C#项目中,经常会有枚举型与ComboBox进行关联的需求。这样的需求如果使用字符串来处理,则每次都要转换比较麻烦。本文给出了一种基于泛型的窗体数据动态绑定与读取的方法,从而能够在大部分情况下可以一劳永逸地解决问题。输入枚举型我们使用以下枚举型为示例。显示窗体为默认Form1,然后在上面添加一个ComboBox对象comboBox1。 public enum LogType { ...原创 2019-08-14 09:47:56 · 2035 阅读 · 2 评论 -
软件开发的KISS原则
KISS原则是软件开发中的最顶层的思想,全称为:Keep It Simple & Stupid。从英文的直译就是追求简单和易用。根据生活的经验:愚蠢的人,总会将简单的问题弄复杂;智慧的人,总是能使复杂的问题变简单!在软件开发领域也是这样。在软件设计中,这个原则非常适用。我们就以初级程序员和高级程序员为例。初级程序员会把代码写的非常长而且难懂,比如可以看看网上很多学生的作品,大部分的项目...原创 2019-08-19 08:23:15 · 1207 阅读 · 1 评论 -
里氏替换原则(LSP:Liskov-Substituion Principle)
定义任何基类可以出现的地方,都可以使用派生类进行替换。这个原则是面向对象程序设计的基础。我们先看下面的示例,以理解。示例// 类的定义class People{}class Student extends People{}class Graudate extends Student{}// 客户端使用代码People p1 = new People();People p2 = ...原创 2019-08-09 09:27:22 · 502 阅读 · 0 评论 -
单例模式
定义单例模式指的是只有唯一一个实例的类。在数学中,可以理解为“有且仅有一个元素的集合”。三大特性唯一性:单例类只能创建唯一一个实例。封闭性:唯一的一个实例必需是在单例类内部创建。可见性:外部都可以直接或者通过方法封装来访问到这个唯一的实例。优点只有一个实例减少了CPU、内存、硬盘等资源的开销,尤其是当这个实例会被频繁调用的时候。避免对资源的多重占用,尤其是在一些资源竞争的场景...原创 2019-08-06 09:28:28 · 462 阅读 · 0 评论 -
GoF的主要设计原则与其23种设计模式快速解读
文章目录1 简介2 面向对象三大属性3 面向对象七大设计原则4 GoF 的 23 种设计模式4.1 GoF简介4.2 23种设计模式4.2.1 创建型模式4.2.2 结构型模式4.3.3 行为型模式5 总结参考资料1 简介很多新手程序员往往会有这样的经历:在一个实际项目中,随着项目需求的不断细化和丰富,某些类的功能会不断增加丰富。新加入的功能有些很类似,有些区别很大,有些甚至完全不相关。由于缺...原创 2019-08-06 08:35:00 · 788 阅读 · 0 评论 -
开放封闭原则(SCP:Open-Closed Principle)
定义开放封闭原则就是说对扩展开放,对修改封闭。为了理解这个概念,我们首先要了解类的定义和类的使用这两个概念。类的定义类是对一个事物的状态和行为的定义。在实际的编码过程中,表现为一个类的源文件,比如 Student 类。类的源文件中通过多行代码对类进行细说的定义和实现。类的使用当有了类的源文件以后,我们就可以利用这个类生成此类的对象,比如 Student s1 = new Student(...原创 2019-08-08 11:16:44 · 674 阅读 · 0 评论 -
简单工厂方法模式(Simple Factory Methord)
定义在工厂模式中,我们把被创建的类的对象(或实例)称为产品,把创建产品的对象称为工厂。当需要创建的同一类产品数量是固定的时候,为了简化操作,我使用一个类作为工厂,根据不同的输入参数,决定生产的产品。这种模式叫简单工厂模式。简单工厂 模式属于创建型模式,由于生产方法是静态方法(见下面示例),所以又叫做静态工厂方法(Static Factory Method)注意:由于违背“开放封装原则”,简单工厂...原创 2019-08-08 10:32:07 · 521 阅读 · 0 评论 -
利用单一职责原则(SRP)设计 Animal 类和 Breathable 接口
文章目录前言问题描述本文设计附录:转文回顾前言本文利用单一职责原则,以一个动物、海生动物和可呼吸接口的设计,展示一个常用的设计原则,从而达到低耦合高内聚的要求,实现更好的代码利用的目标。问题描述现有多种动物,有的可能在陆地呼吸,有的在水中呼吸,如何进行设计才能便于利用和扩展。这个问题来源于最新阅读了一篇关于单一职责原则(SRP)的文章[1],有兴趣的可以看下,如果只想简单了解内容,参见附录...原创 2019-08-05 10:59:54 · 670 阅读 · 0 评论