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

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

关于什么是模式,官方一点的概念就是:解决相似问题的不同解决方案(或 在某一情景下的问题解决方案)
也就是说,要解决一个问题,方法不只一种,可以有很多种,就像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)还望各位大虾指正。

转载于:https://www.cnblogs.com/Random/archive/2007/05/02/734764.html

为什么要引入模式概念来设计软件相关推荐

  1. Bootstrap4+MySQL前后端综合实训-Day04-AM【新闻管理手机端页面+数据库操作(PowerDesigner 图形化数据库设计软件、SQLyog软件)】

    [Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记] 目   录 W3C标准盒子模型和IE盒子模型的区别 Bootstrap4--新闻管理手机端页面 菜 ...

  2. 领域驱动设计:软件核心复杂性应对之道_人人都可以领域驱动设计(一)

    最近几年,领域驱动设计(Domain-Driven Design,DDD)这个术语越来越多地出现在软件工程师的视野里.对DDD不熟悉的人可能会觉得它是软件领域里的一个新的概念,但是实际上,Eric E ...

  3. web项目发布到iis中readystate一直处于 interactive_Framer Web 发布后,终于像个正经的设计软件了。...

    Framer 自从创立以来,始终处于不温不火的状态,经过这么多年的发展,定位依然很尴尬,设计师用不来,工程师更不屑于用.从最早的 Framer Classic 到后来震惊业界的 Framer X,虽然 ...

  4. 【转帖】药物设计软件【schrodinger】 all manual

    药物设计软件[schrodinger] all manual Schrödinger(薛定谔)是药物发现的完整软件包,包括:基于受体和配体结构的诱导契合和柔性对接模式:基于受体结构及配体极性的对接模式 ...

  5. 二维动画设计软件应用——Flash CS6全书电子教案完整版电子教案

    课程内容 单元1  进入Flash 动画世界 计划课时 2课时 一.情景引入 Flash是一款集动画创作与应用程序开发于一体的优秀二维软件,它以流式控制技术和矢量技术为核心,制作的动画具有短小精悍的特 ...

  6. 3D设计软件SolidWorks特征研究—— 3种放样方式 | 附视频教程

    SolidWorks 是世界上第一个基于Windows开发的三维CAD系统,是可实现设计.模拟.成本估算.可制造性检查.CAM.可持续设计和数据管理等多种功能的三维设计软件,包含适用于钣金.焊件.曲面 ...

  7. 协作工具:即时设计(第三方UI设计软件)

    协作工具:即时设计(第三方UI设计软件) 在线设计效果图.切片,导出等操作. 官方地址:https://js.design/ 效果图: 案例效果图: 使用说明: 直接访问网页版,注册登录即可使用! 可 ...

  8. 重构:改善既有代码的设计(软件开发的不朽经典)

    重构:改善既有代码的设计(软件开发的不朽经典) 基本信息 作者: (美)Martin Fowler   译者: 熊节[同译者作品] 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:978 ...

  9. 标签设计软件如何批量制作ITF14码

    ITF14码对印刷精度要求不高,适合直接印刷于表面不够光滑.受力后尺寸易变形的瓦楞纸或纤维板上.其条码内容由14位数字且最后一位为校验位(校验位数字自动生成)组成,ITF14码四周有矩形保护框,且左右 ...

最新文章

  1. 逻辑回归模型(Logistic Regression, LR)基础
  2. BCH虫洞项目有多安全以及WHC究竟能干什么?
  3. OC__part11.1
  4. 【MFC】Windows样式
  5. 一种基于随机投影的本地差分隐私高维数值型数据收集算法
  6. Java记录 -45- List的toString方法
  7. 【认知无线网络】认知无线网络基础知识学习
  8. eclipse JSP页面中的JS代码为黑色,JS单独文件是OK的
  9. efi文件错误服务器崩溃,[转自百度]关于系统安装时候弹出提示winload.efi文件损坏...
  10. vue 一个公式 编辑器 组件
  11. 影楼——Lr基础操作PS动作及批处理
  12. mysql sumif函数的使用方法_MySQL与EXCEL sum sumif sumifs 函数结合_品牌汇总_20161101
  13. 数字营销浪潮下,企业如何打赢流量反欺诈攻防战?
  14. mac英文输入模式下不能长按连续输入
  15. Spring包含JAR的详解
  16. HTML5 实现小车动画效果(Canvas/CSS3/JQuery)
  17. 在opencv中如何生成灰度图
  18. matlab 2048小游戏
  19. 7款最流行的在线项目管理工具
  20. Python制作塔防小游戏

热门文章

  1. java写万年历_用java代码写万年历
  2. irobot擦地机器人故障_iRobot擦地机器人:只会擦地并不“奢侈”
  3. python 快速排名发包_2020年SEO快速排名发包技术及原理
  4. java axis2 jar_Java axis2.jar包详解及缺少jar包错误分析
  5. Macbook 无法找到Centos启动盘问题解决
  6. 【编程开发】Python隐藏属性——使用双下划线标识私有属性,外部不可直接访问...
  7. 循环神经网络(RNN, Recurrent Neural Networks)——无非引入了环,解决时间序列问题...
  8. IJ pom包的自动导入设置
  9. 对javascript闭包的理解
  10. UML和模式应用学习笔记-1(面向对象分析和设计)