为什么要引入模式概念来设计软件

      今天读了《设计模式精解》中的设计模式篇,感觉现在才算是对模式有了一定了解。
在此将一些心得体会和大家交流一下:)

      
      要了解模式首先就要知道什么是模式

      关于什么是模式,官方一点的概念就是:解决相似问题的不同解决方案(或 在某一情景下的问题解决方案)
也就是说,要解决一个问题,方法不只一种,可以有很多种,就像1+1+1=3,1+2=3,2+1=3,0+3=3,3+0=3。
这里的问题就是要得出数字3,怎样才能得出数字3 (这个就是要解决的问题)
有这些方法可以得到:1+1+1,1+2,2+1,0+3,3+0 (这些就是解决问题的方法)

直于要用什么要的方法来解决这个问题,这就要看是什么情景了,
如果是每个相加的数不能大于1,那么就用1+1+1;
如果最多只能出现2个加数,那么就可以用1+2,2+1,0+3,3+0;
如果每个相加的数必须大于0,那么就可以用1+1+1,1+2,2+1;
这些就是在某一情景下的问题解决方案的最简单的描述,至少,我是这么理解的。


      再来看下模式的基本要素

       项目                                                       描述

       名称                  每个模式都有一个独一无二的名称,以便人们鉴别
       意图                  模式的目的
       问题                  模式试图解决的问题
    解决方案             对于自己出现的场景中的问题,模式怎样提供一个解决方案
参与者和协作者     模式包括的实体
       效果                  使用模式的效果。使用模式的同时研究其约束
       实现                  怎样实现模式(实现只是模式的具体表现形式,而不能像模式本身那样被分析)


      还有学习设计模式的目的

      ·复用解决方案(别人总结的经验,我们可以直接拿来用)
              一个好的解决方案,我们肯定不会只用一次就将其丢弃了,这和一个好的算法一样,有了我们就可以拿来用,这样就可以提高我们的开发效率,不必去做一些重复的工作。

      ·建立通用的术语(有利于交流和协作,这也应该可以看成一种标准)
              我是这样理解“通用”和“标准”的:
              先看一个有趣的东东:

            “我爱你”的各种国家语言

            Afrikaans(南非洲的荷兰语) - Ek het jou lief
            Albanian(阿尔巴尼亚) - Te dua
            Arabic(阿拉伯(对男性) - Ana behibak (to male)
            Arabic(阿拉伯(对女性) - Ana behibek (to female)
            Armenian(亚美尼亚) - Yes kez sirumen
            Bambara(班拉族语) - M'bi fe
            Bangla(孟加拉语) - Aamee tuma ke bhalo aashi
            Bulgarian(保加利亚) - Obicham te
            Cambodian(柬埔寨) - Soro lahn nhee ah
            Cantonese Chinese(广东话) - Ngo oiy ney a
            Catalan(加泰罗尼亚语) - T'estimo
            Cheyenne(夏安语) - Ne mohotatse
            Chichewa(齐佩瓦语) - Ndimakukonda
            Chinese(汉语) - 我爱你 (wo ai ni)
            Corsican(科西嘉语) - Ti tengu caru (to male)
            Creol(克利奥尔语) - Mi aime jou
            Croatian(克罗地亚语) - Volim te
            Czech(捷克) - Miluji te
            Danish(丹麦) - Jeg Elsker Dig
            Dutch(荷兰) - Ik hou van jou
            English(英语) - I love you
            Esperanto(世界语) - Mi amas vin
            Estonian(爱沙尼亚) - Ma armastan sind
            Ethiopian(埃塞俄比亚) - Afgreki'
            Faroese(法罗语) - Eg elski teg
            Farsi(波斯语) - Doset daram
            Filipino(菲律宾) - Mahal kita
            Finnish(芬兰) - Mina rakastan sinua
            French(法语) - Je t'aime
            Gaelic(盖尔语) - Ta gra agam ort
            Georgian(乔治亚州) - Mikvarhar
            German(德语) - Ich liebe dich
            Greek(希腊) - S'agapo
            Hawaiian(夏威夷语) - Aloha wau ia oi
            Hebrew(希伯来语(对女性) - Ani ohev otah (to female)
            Hebrew(希伯来语(对男性) - Ani ohev et otha (to male)
            Hindi(北印度语) - Hum Tumhe Pyar Karte hae
            Hopi(霍皮语) - Nu' umi unangwa'ta
            Hungarian(匈牙利) - Szeretlek
            Icelandic(冰岛) - Eg elska tig
            Indonesian(印度尼西亚) - Saya cinta padamu
            Inuit(纽因特语) - Negligevapse
            Irish(爱尔兰) - Taim i' ngra leat
            Italian(意大利) - Ti amo
            Japanese(日本) -爱してる (Aishiteru)
            Kannada(埃那得语) - Naanu ninna preetisuttene
            Kiswahili(斯瓦西里语) - Nakupenda
            Korean(韩语) - 사랑해 (Sarang Heyo)
            Latin(拉丁语) - Te amo
            Latvian(拉托维亚语) - Es tevi miilu
            Lebanese(黎巴嫩) - Bahibak
            Lithuanian(立陶宛) - Tave myliu
            Malay(马来语) - Saya cintakan mu / Aku cinta padamu
            Malayalam(马拉雅拉姆语) - Njan Ninne Premikunnu
            Marathi(马拉地语) - Me tula prem karto
            Mohawk(莫霍克语) - Kanbhik
            Moroccan(摩洛哥) - Ana moajaba bik
            Nahuatl(纳瓦特尔语) - Ni mits neki
            Navaho(纳瓦霍语) - Ayor anosh'ni
            Norwegian(挪威) - Jeg Elsker Deg
            Papiamento(帕皮阿门托语) - Mi ta stimabo
            Persian(波斯语) - Doo-set daaram
            Pig Latin(大拉丁语) - Iay ovlay ouyay
            Polish(波兰) - Kocham Ciebie
            Portuguese(葡萄牙) - Eu te amo
            Thai(泰语(对男性) - Chan rak khun (to male)
            Thai(泰语(对女性) - Phom rak khun (to female)
            Turkish(土尔其) - Seni Seviyorum
            Ukrainian(乌克兰) - Ya tebe kahayu
            Urdu(乌尔都语) - mai aap say pyaar karta hoo
            Vietnamese(越南(对女性) - Anh ye^u em (to female)
            Vietnamese(越南(对男性) - Em ye^u anh (to male)
            Welsh(威尔士语) - 'Rwy'n dy garu
            Yiddish(意第绪语) - Ikh hob dikh

            这个东东想必大家都看到过,为了表达同一个意思,却有这么多种语言,在语言学中,足可以表现出其的丰富多彩。但如果要对各个国家的人表达这么一个意思,就要用到这么多个字符来分别表示~~~天~~
如果,也仅仅是如果哈,ISO哪天发布了《“我爱你”全球化标准权威指南》,那么要对全球人们表达这个意思就轻松多了。。。这里就足以可见标准的重要性了。
所以,我所理解的标准就是,实现各种相同概念的不同表达方式的统一。
概念的表达方式一旦得到统一,那么人们交流起来自然就轻松多了。

·可以从更高层的视角来观察问题、设计过程和面向对象(避免过早接触细节)
为了说明为什么要避免过早地接触细节,书中引入了经典的“木匠模式”
(这个可以最最简单地反应出模式的实质)

两个木匠关于制作抽屉的对话原文:
“木匠A:你认为我们应该怎样制作这些抽屉呢?
  木匠B:唔,你想我们应该这样做结合部分,在木材上直锯下去,然后回转45°锯,然后再直锯下去,再朝另一个方向回转45°锯,再直锯下去,然后……”
有点晕,不知道木匠B在说什么。
这就相当于
“程序员A:你认为我们应该怎样完成这个程序呢?
  程序员B:唔,你想我们应该这样做,先用if语句判断该数字是不是在指定范围之内,如果符合要求,就定义一个变量i,用一个for循环,i的范围从1到之前判断的数本身,每次递增1,用判断后的数来除以i,每次用if语句来判断它能否被i整除,如果……”
就是这样,B的回答就是代码细节,说明了要用什么样的代码来处理,但对于“程序要做什么”以及“为什么要这样做”,我们却一无所知。
所以,软件设计的一开始,我们应该避免出现这样的细节化问题,应该把问题放在更高一些的层次,要明白我们应该要做什么。这种层次的思想是从上往下的,相信只要了解OO和软件工程思想的都理解这个概念,这里我就不废话了。

        前面所说的这些,都是为了说明为什么要引用“模式”这个概念来设计软件。“软件”发展到现在已经不是独立的一个东东了,像软件工程学的概念也是从建筑工程的思想中引入的,这里的模式也是如此,所以到今天这个时代,软件开发已经不是简单的编写程序能表述的了,其中涉及的思想太多太多,偶还要抓紧时间多学啊~~~HOHO~~

         
          好了,就写这些了,回过头看一下,题目好像有点大了,不过一时想不出什么好点的题目了,就这样凑合着用下嘛,还可以骗下点击率
         最后要说明一下,我也是一名初学者,文中的一些看法只是个人对一些观点的理解,也许我所理解的东西还有些肤浅,而且可能还会有些错漏或错误的理解,错误的地方(huang)还望各位大虾指正。

posted @ 2007-05-02 23:08  随机  阅读(1526)  评论(4编辑  收藏  举报