面向对象的设计模式学习笔记(序)
都说人是一种经验性的动物。
记得一节课,Zhangさん在软件工程课堂上说了这样一句话,“软件是什么?软件,是一种思想”,当时有好些人笑坏了。或认为是忽悠或认为是扯淡。我没有笑,我曾经在某本书上看过这句话,也出于对软件工程无知。
出来工作这么久,真的是越来越觉得设计模式的重要。一个系统设计如果没用到设计模式,它将会显得异常单薄,系统扩展也会显得异常艰难。更重要的是,使我也显得异常痛苦(提高工资的法码之一哪!)。
什么是设计模式呢?书中说“设计模式描述了软件设计过程中某一类常见问题的一般性的解决方案”。再说说为什么要用设计模式。如果你需要求一个三角形的面积,你会毫不犹豫地用上三角形面积公式(S=1/2dh)。为什么呢,是因为三角形面积公式是前人总结出来的正确的理论经验。这就是模式对你的影响。当然,生活中还有很问题的解决需要用到模式,如炒菜的一般都是放盐油酱醋等,有谁会了每炒一个小菜时候,去另僻路径来研究另外一套化学材料呢?所以,生活中解决的很多问题,都可以应用前人总结出来的一些模式来解决。同理,公司为什么愿意招更有工作经验的人呢?因为他知道的模式(知道解决问题的方法)比较多呀。
软件是易变的。软件就是一个变色龙,如手机软件,之前只有通话功能,接着有发短信功能,接着是音乐播放功能,GPS定位功能……用户的需求是不满足的,需求不断变化,那么手机软件得不断跟着变化。我们做软件的多累呀,你要不断添加功能,我就要不断更改我的软件设计。但没办法,谁叫你是上帝,上帝说改就是改。但是,反正是要更改的,只要是满足你的需求,我能不能做一些设计工作,来应对你对软件的变化需求呢?答案是肯定的。
为了应对软件的变化,我们就得管理这些变化。在软件设计过程中,通过面向对象的方法,结合设计模式,把易变化和不易变化的东西抽象出来。一旦用户提出新的需求的时候,我就不必大动干戈,稍加修改一下我的软件程序就实现了。好吧,貌似有点乱。举个例子:你想喝珍珠奶茶,我开始忙拉,倒水,放入奶粉,然后放入珍珠。好了,给你一杯珍珠奶茶。完成任务了。一会你又埋怨了,“我要喝苹果味的珍珠奶茶”, 我又开始忙开拉,倒水,放入奶粉,然后放入珍珠,再放入苹果汁,OK了。惨拉,一会你又来了,“要喝菠萝味的……”
我觉得我不应该这么忙,于是准备好了一大桶水,冲上奶粉调成奶茶…….哈,你又是香蕉味的是吧,老夫拿杯奶茶再加上香蕉果汁就行了。在这个例子中,我是把“奶茶”抽象出来,然后让你想喝的味奶茶“继承”一下这个奶茶就行了。省了一步工作我就不那么忙了。算是皆大欢喜。以上做法,在软件设计中其实是实现了装饰者模式。有了一个好的设计,然后才能更好面对不断的需要改变。
什么又是面向对象呢?所谓一切都是对象,其三大机制是:封装,隐藏内部实现;继承,复用现有代码;多态,改写对象行为。封装俗点说就是包装,如你的摄像机,你直接使用它的功能按键就好了,你不必去关心摄像机内部是如何进行光影作用的。因为厂家把摄像机“封装”得很好拉。继承就好比你有摄像功能的手机,让你的手机继承摄像机的功能,就变成你要的手机拉。多态呢?比如手机和摄像机都有一个OK按扭。假如把它两抽象为数码产品。这时。我给你一个数码产品,如果是手机,按OK,就是开启通话功能,如果是摄像机,则是拍照片。同是数码产品,按OK按扭,执行的动作不同,这就是多态了。
面向对象设计模式是一种理念,一种思想,如果想在更深的层次对软件设计进行理解,那么这是一种值得软件人拥抱的方法。
浙公网安备 33010602011771号