为什么要引入模式概念来设计软件
今天读了《设计模式精解》中的设计模式篇,感觉现在才算是对模式有了一定了解。
在此将一些心得体会和大家交流一下:)
要了解模式首先就要知道什么是模式
关于什么是模式,官方一点的概念就是:解决相似问题的不同解决方案(或 在某一情景下的问题解决方案)
也就是说,要解决一个问题,方法不只一种,可以有很多种,就像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
为什么要引入模式概念来设计软件相关推荐
- Bootstrap4+MySQL前后端综合实训-Day04-AM【新闻管理手机端页面+数据库操作(PowerDesigner 图形化数据库设计软件、SQLyog软件)】
[Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记] 目 录 W3C标准盒子模型和IE盒子模型的区别 Bootstrap4--新闻管理手机端页面 菜 ...
- 领域驱动设计:软件核心复杂性应对之道_人人都可以领域驱动设计(一)
最近几年,领域驱动设计(Domain-Driven Design,DDD)这个术语越来越多地出现在软件工程师的视野里.对DDD不熟悉的人可能会觉得它是软件领域里的一个新的概念,但是实际上,Eric E ...
- web项目发布到iis中readystate一直处于 interactive_Framer Web 发布后,终于像个正经的设计软件了。...
Framer 自从创立以来,始终处于不温不火的状态,经过这么多年的发展,定位依然很尴尬,设计师用不来,工程师更不屑于用.从最早的 Framer Classic 到后来震惊业界的 Framer X,虽然 ...
- 【转帖】药物设计软件【schrodinger】 all manual
药物设计软件[schrodinger] all manual Schrödinger(薛定谔)是药物发现的完整软件包,包括:基于受体和配体结构的诱导契合和柔性对接模式:基于受体结构及配体极性的对接模式 ...
- 二维动画设计软件应用——Flash CS6全书电子教案完整版电子教案
课程内容 单元1 进入Flash 动画世界 计划课时 2课时 一.情景引入 Flash是一款集动画创作与应用程序开发于一体的优秀二维软件,它以流式控制技术和矢量技术为核心,制作的动画具有短小精悍的特 ...
- 3D设计软件SolidWorks特征研究—— 3种放样方式 | 附视频教程
SolidWorks 是世界上第一个基于Windows开发的三维CAD系统,是可实现设计.模拟.成本估算.可制造性检查.CAM.可持续设计和数据管理等多种功能的三维设计软件,包含适用于钣金.焊件.曲面 ...
- 协作工具:即时设计(第三方UI设计软件)
协作工具:即时设计(第三方UI设计软件) 在线设计效果图.切片,导出等操作. 官方地址:https://js.design/ 效果图: 案例效果图: 使用说明: 直接访问网页版,注册登录即可使用! 可 ...
- 重构:改善既有代码的设计(软件开发的不朽经典)
重构:改善既有代码的设计(软件开发的不朽经典) 基本信息 作者: (美)Martin Fowler 译者: 熊节[同译者作品] 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:978 ...
- 标签设计软件如何批量制作ITF14码
ITF14码对印刷精度要求不高,适合直接印刷于表面不够光滑.受力后尺寸易变形的瓦楞纸或纤维板上.其条码内容由14位数字且最后一位为校验位(校验位数字自动生成)组成,ITF14码四周有矩形保护框,且左右 ...
最新文章
- 逻辑回归模型(Logistic Regression, LR)基础
- BCH虫洞项目有多安全以及WHC究竟能干什么?
- OC__part11.1
- 【MFC】Windows样式
- 一种基于随机投影的本地差分隐私高维数值型数据收集算法
- Java记录 -45- List的toString方法
- 【认知无线网络】认知无线网络基础知识学习
- eclipse JSP页面中的JS代码为黑色,JS单独文件是OK的
- efi文件错误服务器崩溃,[转自百度]关于系统安装时候弹出提示winload.efi文件损坏...
- vue 一个公式 编辑器 组件
- 影楼——Lr基础操作PS动作及批处理
- mysql sumif函数的使用方法_MySQL与EXCEL sum sumif sumifs 函数结合_品牌汇总_20161101
- 数字营销浪潮下,企业如何打赢流量反欺诈攻防战?
- mac英文输入模式下不能长按连续输入
- Spring包含JAR的详解
- HTML5 实现小车动画效果(Canvas/CSS3/JQuery)
- 在opencv中如何生成灰度图
- matlab 2048小游戏
- 7款最流行的在线项目管理工具
- Python制作塔防小游戏
热门文章
- java写万年历_用java代码写万年历
- irobot擦地机器人故障_iRobot擦地机器人:只会擦地并不“奢侈”
- python 快速排名发包_2020年SEO快速排名发包技术及原理
- java axis2 jar_Java axis2.jar包详解及缺少jar包错误分析
- Macbook 无法找到Centos启动盘问题解决
- 【编程开发】Python隐藏属性——使用双下划线标识私有属性,外部不可直接访问...
- 循环神经网络(RNN, Recurrent Neural Networks)——无非引入了环,解决时间序列问题...
- IJ pom包的自动导入设置
- 对javascript闭包的理解
- UML和模式应用学习笔记-1(面向对象分析和设计)