2019-10-21 11:48:46
(三) 优先使用聚合,而不是继承有一段时间,养猪场的老板雇用了清洁工人来打扫猪舍。但有一天,老板忽然对自己说"不对啊,既然我有机器人,为什么还要雇人来做这件事情?应该让机器人来打扫宿舍!"于是,这个需求被提交到了机器人的研发小组。看到这个需求,我们敏感地意识到,这是一个潜藏了更多变化的需求,未来机器人的功能还可能会不断增加,于是,我们提取出了一个抽象的机器人接口,并实现了两个具...
2019-10-16 19:45:38
这是勇哥很久以前在博客园里面发的文章。它是读设计模式的书时做的实践,我个人是比较喜欢的,这里转载过来给学习设计模式的朋友把玩一下。对于设计模式, 从本质上说, 其最大的用途就是适应需求的变化. 因为有了设计模式,我们可以在设计阶段就为未来可能发生的变化留下足够的空间.我们通过一个建造现代化养猪场的故事, 来讨论一下设计模式与需要变化之间的关系.(一)设计模式最根本的意图是适应需求的变化一个机器人研...
2019-07-22 22:04:39
单例模式主要处理两个问题: 全局访问与实例化控制单例模式采用private构造函数,让该类不能外部new, 并且提供static方法 GetInstance()方法返回唯一实例.采用lock机制可以避免在多线程环境下可能产品多个实例.下面是勇哥编写的一个例子:工具箱1Form和代码using System;
using System.Collections.Generic;
using Sys...
2019-03-16 21:09:26
引言面向对向程序设计的三大特征是: 封装,继承,多态平时做设备的程序用得最多的还是封装,或者还有一些基于局部功能性的继承。真心来说程序仅仅是为了实现功能,还远远谈不上真正的是面向对象开发。当然这也是有原因的:一方面,设计模式并不是直接写出来的,而是重构代码改出来的(至少勇哥是这么认为的)。在完成了设备功能的情况下,往往因为时间关系,不可能再重构代码,因为当设备开始进行生产状态后,客户认为再去动代码...
2018-07-24 21:53:44
在netMarketing/winformHelper/dynMenu.cs 这个类是动态菜单的业务逻辑。它的配置窗体位于另一个工程 UserUI/Dialog/dynMenuSteup.cs 中。dynMenuSteup.cs 包含了netMarketing类的引用。但是netMarketing类中又想弹出UserUI工程中的对话窗,但是你不可能再包含UserUI的引用,因为这样就是循环引用了。...
2018-07-24 17:09:41
c# 中 Abstract和Virtual比较容易混淆,都与继承有关,并且涉及override的使用。下面讨论一下二者的区别:一、Virtual方法(虚方法) virtual 关键字用于在基类中修饰方法。virtual的使用会有两种情况: 情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法。 情况2:在基类中定义...