- 博客(17)
- 资源 (50)
- 收藏
- 关注
原创 建造者模式(Builder)
建造者模式(Builder):将一个复杂对象的构建与他的表示分离,使得同样的构造过程可以创建不同的表示。 建造者模式的好处是使得建造代码与表示代码分离,由于建造者隐藏了该产品如何组装的,所以若需要改变一个产品的内部表示,只需要定义一个具体的建造者即可。 建造者模式适用于:当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式
2009-03-26 15:03:00 386
原创 外观模式(Facade)
外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 外观模式使用:首先,在设计初期阶段,应该要有意识的将不同的两个层分离;其次,在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,增加外观模式可以提供一个简单的接口,减少他们之间的依赖;第三,在维护遗留大系统时,可以增加一个Facade类。
2009-03-26 10:04:00 421
原创 迪米特法则(LoD)-最少知识原则
迪米特法则(LoD)-最少知识原则:如果两个类不必彼此直接通信吗,那么这两个类就不应当发生直接的互相作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三个转发这个调用。 在结构设计上,每一个类都应当尽量降低成员的访问权限。其基本思想,是强度了类之间的松耦合。类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。
2009-03-26 09:40:00 1070
原创 模板方法模式
模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 模板方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体系他的优势。
2009-03-25 10:44:00 332
原创 原型模式(Prototype)
原型模式(Prototype):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 原型就是从一个对象再创建另外一个可定制的对象,而不需要知道任何创建的细节。 一般在初始化的信息不发生变化的情况下,克隆是最好的方法。这既隐藏了细节,又大大提高了性能。
2009-03-24 17:39:00 402
原创 工厂方法模式(Factory Method)
<!-- document.domain="qq.com"; //parent.qZEditor.callback(); function init(){ var key = location.hash.substr(1); document.editorID = key; parent.editorHash[key
2009-03-24 17:33:00 413
原创 代理模式(Proxy)
代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 远程代理:为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。 虚拟代理:根据需要创建开销很大的对象,通过他来存放实例化需要很长时间的真实对象。 安全代理:用来控制真实对象访问时的权限。 智能代理:当调用真实的对象时,代理处理另外一些事。
2009-03-24 17:18:00 337
原创 装饰模式(Decorator)
<!-- document.domain="qq.com"; //parent.qZEditor.callback(); function init(){ var key = location.hash.substr(1); document.editorID = key; parent.editorHash[key
2009-03-24 16:52:00 464
原创 依赖倒转原则(针对接口编程,而非实现编程)
<!-- document.domain="qq.com"; //parent.qZEditor.callback(); function init(){ var key = location.hash.substr(1); document.editorID = key; parent.editorHash[key
2009-03-24 14:18:00 791
原创 开放-封闭原则
开放-封闭原则:软件实体(类、模板、函数等)应该可以扩展,但不可以修改。即,对于扩展是开放的(Open for extension);对于更改是封闭的(Closed for modification)。 无论模块是多么的“封闭”,都会存在一些无法对之封闭的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该对于那种变化封闭做出选择。 开放-封闭原则是面向对象设计的核心
2009-03-24 13:56:00 569
原创 单一职责原则(SRP)
单一职责原则(SRP):就一个类而言,应该仅有一个引起他变化的原因。 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。 软件设计真正要做的许多内容,就是发现职责并把这些职责互相分离。如果你能够想到多余一个的动机去改变一个类,那么这个类就具有多余一个的职责
2009-03-24 13:39:00 432
原创 扩展CListCtrl及需要注意的问题
// 有时,我们需要扩展CListCtrl已添加我们的功能,如排序,追加信息等等。为了实现排序,我们需要把列信息添加到ItemData中,这是,我们在删除列时,就需要先删除我们的信息,以避免内存丢失。同时注意,为了保证退出时,销毁信息,我们要重载OnDestroy函数,在里面释放我们的消息(不能在析构函数中完成,因为那是,列已删除)class CXReportList : public CList
2009-03-20 13:55:00 816
原创 vector中元素的查找(find_if)与复制(copy)
查找: 在Vector中查找元素,可以通过find_if快速实现,但是需要先定义算子 class CIDCompare : unary_function { public: CIDCompare(DWORD dwUserID_) { m_dwUserID = dwUserID_; } bool operator()(const TINFOVECTOR::v
2009-03-20 13:37:00 1686
原创 在列表控件中显示文件图标与类型
初始化列表 SHFILEINFO rInfo; HIMAGELIST hImglist; hImglist = (HIMAGELIST) SHGetFileInfo ( L"", 0, &rInfo, sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_SMALLICON | SHGFI_SYSICONINDEX );
2009-03-20 11:08:00 1244
原创 树形控件设定图标以及“双击”与“单击时选中”处理
设定图标与属性: TreeInit(UINT nBitmapID_, int nDimension_, int nInit_, int nSeled_) { CBitmap cBit; cBit.LoadBitmap(nBitmapID_); m_cImages.Create(nDimension_, nDimension_, ILC_COLORDDB, nIn
2009-03-20 10:41:00 2861 1
原创 工具条添加图标与变灰(禁用)
if (!m_wndToolBar.CreateEx( this, TBSTYLE_FLAT, WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC|CBRS_BORDER_TOP) || !m_wndToolBar.LoadTool
2009-03-12 15:29:00 1618
原创 VC中屏蔽F1
用VC开发的程序,按F1时,总是弹出查找.hlp文件,即使在PreTranslateMessage()中把VK_F1屏蔽也无效,非常烦人。 其实只要重载一下afx_msg BOOL OnHelpInfo(HELPINFO* pHelpInfo) (对应主程序中消息WM_HELPINFO),然后就可以添加我们自己的处理流程了。
2009-03-04 16:24:00 2279 1
More Effective C Sharp
2010-03-13
Windows驱动程序编写者指南.pdf
2010-02-11
Beginning C#2005 Database
2009-08-17
Programming the Windows driver mode中文版
2008-04-24
C语言函数大全(着色版)
2008-03-05
FAT file system specification中文版
2008-03-04
Autopublish(puttys).zip
2019-09-01
重构----改善既有代码的设计
2010-11-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人