Impl与桥接

五月 3rd, 2012

在我们编程中会碰到这样一个问题
当我们定义了如下一个类

#include "a.h"
#include "b.h"
class CObject
{
public:
CObject();
~CObject();
void Print();
private:
A a;
B b;
}

这段代码原本是没有问题的
但是,当我们对这个类增加成员变量C,或者是A/B本身进行了一些修改,
那么,所有包含该类的文件都会重新编译,如果这个是个基类,则编译过程相当痛苦。
而真正使用这个类的人员,根本就不关心你是否有A/B/C之类,他只想调用Print函数。
就像别人用你的电脑上网,你非要让他知道这个电脑在哪里买的一样。
这个问题的解决方法很简单
既然别人不想看到我的成员变量,我就把它隐藏起来。
具体实现如下:
object.h

class CObject
{
public:
CObject();
~CObject();
void Print();
private:
class Impl;
Impl* pImpl;
}

object.cpp

#include "a.h"
#include "b.h"
class Impl
{
public:
void Print();
private:
A a;
B b;
}

CObject::CObject() : pImpl( new Impl ){}
CObject::~CObject()
{
delete pImpl;
}
void CObject::Print()
{
pImpl->Print();
}

这样的一个实现,叫做实现隐藏
不管Object的结构怎么的变化,都不会引起其它关联类重新编译,唯一不爽会写一些重复的接口。
网上有人说这个实现跟设计模式中的桥接模式一样,分析一下,只是单纯的结构上的形似,解决的问题却不同
桥接模式的一个场景如下

class Pen // 笔
class RedPen : public Pen // 红笔
class BluePen : public Pen // 蓝笔
class ShortRedPen : public Pen // 短红笔
class LongRedPen : public Pen // 长红笔

这是一个正在不断膨胀的类,在颜色和长短上,类型正在不断扩张,桥接模式解决这个问题的方式如下

class Size;
class Clolr;
class Pen // 笔
{
private:
Color* color;
Size * size;
}
class Short : public Size
class Long : public Size
class Red : public Color
class Blue : public Color

这样的一种写法,有效的避免类由于自身元素的变化引发的扩张,是为了解决子类膨胀问题。
而Impl主要是为了解决基类元素变化引起其余相关类变化的一个实现。

外面的世界

四月 17th, 2012

忙活了一个月
东西总算是做完了
效果还比较满意
悠闲的下午
听着这首外面的世界
想起曾经在中科的种种
感慨良多
最近终于把房子买了
算是了却了一桩心事
同时,也领证了
也算是一个有身份的人了
曾经躺在中科宿舍仰望天空的日子
看着满天繁星
想到过未来
好像跟现在的不太一样
又好像有点一样
每一个时期
都有着不同的梦想
梦想虽然在现实面前已经变得那么模糊
模糊到我都快已经觉得那只是一个梦
但是我依然坚持着

外面的世界很精彩
外面的世界也很无奈

年终总结

十二月 29th, 2011

岁末将至、

做个总结、

列举十件事,算是回顾、也算是对明年的一个期待、

1)爸妈来上海

     终于在我工作4年以后,我让老爸老妈出了趟远门,对于我来说,这次的远门意义重大,让我更清楚的认识了老妈,她的坚强、勇气、宽容、无私,无法用言语去形容发生的种种事情,说句实话,心里还有些许阴影,但是也让我成长了很多,希望爸妈能永远身体健康。

2)吴明会结婚

     记得好像是3月份才听她说要5、1结婚,就骗她说估计是回不去了,就一天假,其实当时就已经想好了一定要回去,因为曾经错过了俊哥结婚,已经让我愧疚了很久(一直没对俊哥说,不是我不想回去,其实当时我身上只有4位数的钱了,希望你能懂)。定了30号的机票,满心欢喜的等着,后面吴明会又电话我,问我要不要回去,我还是说了不回去,不过从她那里得到个消息,她家是30号办酒,T_T,那个机票是打折票,退不了,只能再买一张29号的了。在路上有些激动,毕竟第一次参加好朋友的婚礼,而且是这么远回去,回去的时候顺带还给杨和王一人带了一个ip4(自费),那天到了吴明会家,俊哥哥看到了我,眼神感觉有些怪,也许他在想这%^&*的我结婚你不来,心里面有些难受,也没解释,毕竟那天他不是主角,哈哈。吴明会来了,看到了我,有点吃惊,看得出来很开心,后来她说她当时差点哭了,那天晚上跟她聊了很久,生活、人生、过去、未来、很多很多。

3)看房子

    这一年,开始张罗着看房了,不过目前为止还没有结果,年初的时候觉得好像可以看房了,就和卡总一起东看看西看看,其实也没下太大决心,感觉是交给自己那样一个任务,要去看,买房是个麻烦事,而我们两个都怕麻烦,真悲剧,下半年,兴致多了一些,到处找房子看,但都没看到中意的,我们两个都肯定,我们中意的那套就是以前我们租房看到的那套,中意它什么,其实也说不出,年末,调控政策初见成效,到处都是房价跌,买房的兴致又稍微降了一下,算了,还是明年看吧。

4)翁翁结婚

     小年青结婚,刚好卡总公司组织旅游,就去看了一下,他老婆是他初中同学,剧情很狗血,几年没见面,突然有一天在公交上遇到,聊着聊着就好上了。翁翁也道出了一句名言:头发是盛(肾)开的花朵。他是我们寝室第二个结婚的,贱人第一个,牛哥马上元旦也结婚,欧阳好像也是1月18号。貌似剩下的人不多了,我要什么时候结婚呢- -。

5)卡总升职

     卡总升职了,这是年末收获的一个好消息,是因为她老大要移民澳大利亚了,对于工作,我个人的看法是,不要求赚太多,但不能太少,开心就好。她现在的工作应该还行,不过我觉得她还有更大发展空间。

6)买电子产品

      笔记本送给老哥了,给卡总配了一台台式机,这样她下副本的时候不会说卡了- -,年初买了一个G10、一个MB525,应该都是我们买的最贵的手机了,想当年用的黑莓7100才600块,年末买了个kindle touch,目前还在美国,还不知道什么时候能寄过来T_T,悲剧。

7)编程激情仍在

     年初写了一个类库,年末重构了组内一个软件,给来年开了一个好头,明年估计要忙,技术有了写长进,也学到了很多管理方面的东西。组内妹子和另外一个兄弟都升职了,真心替他们高兴,没白培养。总的来说,这一年工作还算顺利。

8)体检

    今年体检结果还不错,基本没毛病,虽然感觉上是瘦了点。干我们这行,身体健康最重要。

9)生日

    今年生日过得很悲催,前一天老妈电话,祝我生日快乐,当天早上,吴跟陈都短信祝快乐,基本是每年例行公事,卡总感觉是忘记了我生日,我其实也忙,都快忘记了,下班,找了很多地方准备买蛋糕,一直买不到,最后在张江那边买到了个,回家,知道没饭吃,买了一份炒饭,到家后,趁卡总在看电影,关了灯拿着蛋糕走进去,开开心心的想给卡总一个惊喜,卡总有点傻掉了,“啊啊啊。今天不是我生日啊。。”,听到这个心情顿时跌入谷底,“大爷的,当然不是你生日,是我生日”。。。

10)卡总

    一年又过去了,我们还在一起,争吵有,但是次数不多,总体感觉还行,希望明年保持,不过明年不知道会换一个称谓。

Windbg 导致系统无限崩溃的解决方法

十月 24th, 2011

为了找程序的句柄泄漏

开了Windbg

使用过后,发现大部分程序开始无限崩溃状态,包括explorer

经同事提醒

是Windbg篡改了注册表,让程序每次启动会执行另外的程序

只需要删除注册表其中一项就ok了

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

泪流满面

八月 22nd, 2011

http://coolshell.cn/articles/5265.html