OOP / Design Patterns
文章平均质量分 72
nyzhl
while(SUCCESS!=try());
展开
-
Singleton - Design Patterns学习笔记(1)
从前些天开始看设计模式的书开始就想写学习笔记。但是最近鲜有机会上网,而且要备战软考,就一直没写。关于Singleton的翻译问题好多书都不一致,有的叫单态,有的叫单身,单件(个人认为这个比较贴切)。我觉得专业名词还是不要翻译为好,免得给人造成困扰。个人觉得Singleton算是最简单,最好理解的设计模式了。它表示某个类只能有一个对象。在程序中,比如一些配置文件,应该只有一个对象的。这时,我原创 2007-10-23 18:46:00 · 1035 阅读 · 0 评论 -
ATL-Style模板 不用虚函数实现 多态
最近在看ATL和WTL,比较有意思的是,它用类模板来实现多态,子类通过类模板将真实的类型传给父类,这样父类就知道真实的类型了。简单的例子:#include //Coding by nyzhltemplateclass CBase{public: void Display() { T* pT = static_cast(this); pT->Print()原创 2009-07-28 16:51:00 · 2048 阅读 · 1 评论 -
模板方法模式 - Design Patterns 学习笔记 (7)
有这么一种情况,有很多类会有一些相似的逻辑,但又不完全一样,只有一些微小的差别,为了这些微小的差别,很多时候我们会一拍脑袋,把这些逻辑不厌其烦的写了一遍又一遍.重复 = 易错 + 难于变化为了解决这个问题,我们可以充分利用多态的特性,将这些微小的变化延迟到子类.每个子类只要实现这些小变化就可以了.抽象类,封装不变的内容: public abstract class Person {原创 2008-10-22 13:31:00 · 546 阅读 · 0 评论 -
面向对象的部分几点设计原则
下面开始纸上谈兵,o(∩_∩)o ,面向对象这个概念并不难,但是要恰当或是说完美的设计并不是一件容易的事情。这需要长期的经验和思考。就像悟道一样,是需要一点一点悟出来的。并不是没有什么经验的情况下,听某位大师的三言两语就能醍醐灌顶的。我现在也算是刚刚入道而已。所以的我理解也不是特别深刻。多看多写多思考,总是会有进步的。1.封装变化就是在程序中,用以变化的部分要封装起来,这样当需求变化时原创 2008-06-06 22:06:00 · 710 阅读 · 0 评论 -
Multithreaded singleton - Design Patterns 学习笔记(5)
在多线程程序中,必须要考虑进程间共享和互斥的问题。 如果恰巧有两个线程访问Singleton类,并做修改的话,会导致出现bug。解决的方法就是给对象加锁:Java://: Configuration.java/** *//** * Singleton of Design Patterns * @author http://blog.csdn.net/nyzhl/ */public原创 2008-01-14 16:17:00 · 983 阅读 · 0 评论 -
Observer (C# Delegate - Event) - Design Patterns学习笔记(4)
观察者模式Java版 http://blog.csdn.net/nyzhl/archive/2007/12/09/1926130.aspx在Java中实现观察者模式,需要在被观察者中持有所有观察者的引用,这样观察者和被观察对象之间存在一定的耦合,只有实现观察者接口的类的对象才可以注册到被观察者中,不够灵活。也许是我在吹毛求疵,因为Java已经做的很好了,但是在C#中,有更好的解决方法-Del原创 2007-12-10 19:47:00 · 1184 阅读 · 0 评论 -
Observer (Java) - Design Patterns学习笔记(3)
观察者模式,就是观察者在被观察对象里注册自己的一个引用,当被观察对象发生观察者敏感的变化时,被观察对象发给注册的所有观察者发送消息(函数调用),观察者做出相应的响应。观察者模式应用很多,比如说经常用到的事件响应。你总不能再起一个线程在那里傻傻不动地监听对象变化,最好的做法就是让对象发生敏感变化时主动给观察者发一个消息,这样就不会造成不必要的开销。今天写了一个观察者的例子:闹钟(被观察对象原创 2007-12-09 23:19:00 · 1225 阅读 · 0 评论 -
数据库连接工厂 - 抽象工厂的应用(C#)
也许很多人都有和我一样的经验,客户的数据库管理系统可能暂时没有定下来,或者是 受服务器的限制,在项目快进行完时需要更换DBMS。由于我们的系统中大量的存在数据库连接,如果类设计不恰当的话,造成数据库连接和其他逻辑的紧耦合,在更改DBMS时就会有很大的麻烦。我们几乎要搜索遍程序的每一个角落。设计模式里有一种很好的解决方案:把数据库连接做成一个抽象工厂(IDbFactory),每种具体的数据库接口原创 2007-11-25 16:43:00 · 1520 阅读 · 0 评论 -
Factory - Design Patterns学习笔记(2)
工厂模式创建了一个生产对象的工厂,是很常用的一种模式。通常可以把工厂模式划分为工厂方法,抽象工厂,反射工厂三种模式。工厂方法和抽象工厂的耦合度较大,所以在C#和Java之类支持反射(Reflection)的语言中,一般选择使用反射工厂。反射工厂在程序运行时通过类装载器动态地装载所需的类,这样,在增加产品实现时,就不必再修改工厂类了,消除了产品类和工厂类之间的耦合。我们以动物工厂为例://先引原创 2007-10-25 12:53:00 · 852 阅读 · 0 评论 -
private virtual 与 Template Method模式
今天面试真倒霉,本来我状态还不错,结果遇到一位咄咄逼人的面试官。然后我就被逼问的晕菜了。最后问private virtual声明的方法有什么用,我竟然随口答没有用。出来想了一下 ,大概是父类还有一个公有的方法调用这个private virtual方法,由于虚函数不受访问权限的影响,在子类中可能会有该方法的override。为了验证这个想法,回去写了段程序试了一下,果然如此。#include原创 2009-07-29 18:57:00 · 135 阅读 · 0 评论