分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

关于金庸小说中到底是招式重要还是内功重要的争论从未停止,我们在这里并不分析张无忌的九阳神功和令狐冲的独孤九剑到底哪个更厉害,但我想每个武林人士梦寐以求的应该是既有淋漓的招式又有深厚的内功。看到这里大家可能会产生疑问了?搞什么,讨论什么招式与内功,我只是个软件开发人员。别急,正因为你是软件开发人员我才跟你谈这个,因为我们的软件开发技术也包括一些招式和内功:Java、C#、C++等编程语言,Eclipse、Visual Studio等开发工具,JSP、ASP.net等开发技术,Struts、Hibernate、JBPM等框架技术,所有这些我们都可以认为是招式;而数据结构、算法、设计模式、重构、软件工程等则为内功。招式可以很快学会,但是内功的修炼需要更长的时间。我想每一位软件开发人员也都希望成为一名兼具淋漓招式和深厚内功的“上乘”软件工程师,而对设计模式的学习与领悟将会让你“内功”大增,再结合你日益纯熟的“招式”,你的软件开发“功力”一定会达到一个新的境界。既然这样,还等什么,赶快行动吧。下面就让我们正式踏上神奇而又美妙的设计模式之旅。

1 设计模式从何而来

在介绍设计模式的起源之前,我们先要了解一下模式的诞生与发展。与很多软件工程技术一样,模式起源于建筑领域,毕竟与只有几十年历史的软件工程相比,已经拥有几千年沉淀的建筑工程有太多值得学习和借鉴的地方。

那么模式是如何诞生的?让我们先来认识一个人——Christopher Alexander(克里斯托弗.亚历山大),哈佛大学建筑学博士、美国加州大学伯克利分校建筑学教授、加州大学伯克利分校环境结构研究所所长、美国艺术和科学院院士……头衔真多,,不过他还有一个“昵称”——模式之父(The father of patterns)。Christopher Alexander博士及其研究团队用了约20年的时间,对住宅和周边环境进行了大量的调查研究和资料收集工作,发现人们对舒适住宅和城市环境存在一些共同的认同规律,Christopher Alexander在著作A Pattern Language: Towns, Buildings, Construction中把这些认同规律归纳为253个模式,对每一个模式(Pattern)都从Context(前提条件)、Theme或Problem(目标问题)、 Solution(解决方案)三个方面进行了描述,并给出了从用户需求分析到建筑环境结构设计直至经典实例的过程模型。

在Christopher Alexander的另一部经典著作《建筑的永恒之道》中,他给出了关于模式的定义:

      每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的成功的解决方案,无须再重复相同的工作。这个定义可以简单地用一句话表示:

模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。【A pattern is a successful or efficient solution to a recurring  problem within a context】

1990年,软件工程界开始关注ChristopherAlexander等在这一住宅、公共建筑与城市规划领域的重大突破。最早将模式的思想引入软件工程方法学的是1991-1992年以“四人组(Gang of Four,简称GoF,分别是Erich Gamma, Richard Helm, Ralph Johnson和John Vlissides)”自称的四位著名软件工程学者,他们在1994年归纳发表了23种在软件开发中使用频率较高的设计模式,旨在用模式来统一沟通面向对象方法在分析、设计和实现间的鸿沟。

GoF将模式的概念引入软件工程领域,这标志着软件模式的诞生。软件模式(Software Patterns)是将模式的一般概念应用于软件开发领域,即软件开发的总体指导思路或参照样板。软件模式并非仅限于设计模式,还包括架构模式、分析模式和过程模式等,实际上,在软件开发生命周期的每一个阶段都存在着一些被认同的模式

软件模式是在软件开发中某些可重现问题的一些有效解决方法,软件模式的基础结构主要由四部分构成,包括问题描述【待解决的问题是什么】、前提条件【在何种环境或约束条件下使用】、解法【如何解决】和效果【有哪些优缺点】,如图1-1所示:

图1-1 软件模式基本结构

软件模式与具体的应用领域无关,也就是说无论你从事的是移动应用开发、桌面应用开发、Web应用开发还是嵌入式软件的开发,都可以使用软件模式。

在软件模式中,设计模式是研究最为深入的分支,设计模式用于在特定的条件下为一些重复出现的软件设计问题提供合理的、有效的解决方案,它融合了众多专家的设计经验,已经在成千上万的软件中得以应用。 1995年, GoF将收集和整理好的23种设计模式汇编成Design Patterns: Elements of Reusable Object-Oriented Software【《设计模式:可复用面向对象软件的基础》】一书,该书的出版也标志着设计模式正式成为面向对象(Object Oriented)软件工程的一个重要研究分支。

从1995年至今,无论是在大型API或框架(如JDK、.net Framework等)、轻量级框架(如Struts、Spring、 Hibernate、JUnit等)、还是应用软件的开发中,设计模式都得到了广泛的应用。如果你正在从事面向对象开发或正准备从事面向对象开发,无论你是使用Java、C#、Objective-C、VB.net、Smalltalk等纯面向对象编程语言,还是使用C++、PHP、Delphi、JavaScript等可支持面向对象编程的语言,如果你一点设计模式也不懂,我可以毫不夸张的说:你真的out了。

【作者:刘伟 http://blog.csdn.net/lovelion】

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

从招式与内功谈起——设计模式概述(一)相关推荐

  1. 招式与内功谈起——设计模式概述(一)

    关于金庸小说中到底是招式重要还是内功重要的争论从未停止,我们在这里并不分析张无忌的九阳神功和令狐冲的独孤九剑到底哪个更厉害,但我想每个武林人士梦寐以求的应该是既有淋漓的招式又有深厚的内功.看到这里大家 ...

  2. 从招式与内功谈起——设计模式概述(三)

    3.设计模式有什么用 下面我们来回答最后一个问题:设计模式到底有什么用?简单来说,设计模式至少有如下几个用途: (1) 设计模式来源众多专家的经验和智慧,它们是从许多优秀的软件系统中总结出的成功的.能 ...

  3. Windows开发的内功和招式

    Windows开发的内功和招式 最近一个月笔者休了大约两周的假期,期间没有学习新的开发技术,也没有去游山玩水,而是对自己的知识结构和Windows开发本身进行了一个深入的思考,收获颇多,在这里希望和大 ...

  4. 二十三式武功招式--总纲

    扯淡 写程序犹如练武,一样需要内外兼修. 数据结构算法,操作系统原理,编译原理这些知识就犹如武侠中的内功心法,需要日夜旦夕苦练,经年累月方能有所小成. 而内功一旦有所成就,其它任何武功学起来就会轻松加 ...

  5. 编程的几种境界与招式

    常常听到管理层谈团队建设与团队成长的话题,一个团队要永葆生机,保持强大战斗力,就必须不断成长.不进则退,这已是亘古不变的道理,不仅仅适用于个人,对于团队来说也是如此.我们来谈谈互联网行业,技术团队成长 ...

  6. 避免需求分析与定义误区的7个招式:作为产品新人,我所遇到的坑(续)

    在需求分析和定义的过程中,作为产品新人的你也许和我一样陷入了误区之中,恨不得抽自己几个耳光?(参见前作需求分析与定义4大误区) 既然已经对可能的隐患有所了解,那么如何避免重蹈覆辙? 招式1:目标驱动, ...

  7. android设计招式之美,麦可网Android设计招式之美

    相关课程: 麦可网Android设计招式之美 麦可网Android高级应用开发 麦可网Android面向对象技术 本套课程目录: 1 – 设计模式与Android框架设计a 2 – 设计模式与Andr ...

  8. Netty基础招式——ChannelHandler的最佳实践

    本文是Netty系列第7篇 上一篇文章我们深入学习了Netty逻辑架构中的核心组件EventLoop和EventLoopGroup,掌握了Netty的线程模型,并且介绍了Netty4线程模型中的无锁串 ...

  9. 独家交付秘籍之招式拆解(第一回)

    简介:上一回说到经历种种交付难题的王小锤一行人,意外发现一本交付秘籍,打开了新世界.本次他们带着具体交付场景来到阿里云,与交付宗师阿莫探讨秘籍中的招式以及招式背后的秘密. 作者:吕莫.新钰 前情介绍 ...

最新文章

  1. 出现 java.util.ConcurrentModificationException 时的解决办法
  2. 算法--------最大正方形(Java版本)
  3. cordova报错:Could not find an installed version of Gradle either in Android Studio, or on your system
  4. java heap space flex_Flash builder 4内存优化之java heap space解决办法
  5. 宝藏好物gRPCurl
  6. 系统架构设计师 - 系统可靠性设计
  7. C#里枚举类型以及值引用和地址引用差别演示代码
  8. 文档加载完成覆盖_在完成文档之前,作业尚未完成
  9. php函数引用参数解惑《细说php》
  10. 'tensorflow' has no attribute 'sub'
  11. body-parser和multer
  12. 云之幻哔哩哔哩uwp_【UWP】一款很 Fluent Design 的 Bilibili UWP客户端:哔哩
  13. 复利计算1.0,2.0,3.0(java)
  14. 联想重装系统去掉保护_如何去掉联想硬盘保护系统?
  15. undefind_undefined
  16. 密码太多不知道怎么记录?不如自己写个密码箱小程序
  17. 在线python编程网页-手把手教你用Python写一个在线网站,这真的很装逼!
  18. 神奇的Navigator对象
  19. 【03】图解原型和原型链by魔芋
  20. matplotlib 设置坐标轴位置(spines),设置坐标别名(xticks,yticks)

热门文章

  1. 什么软件可以把独家的qlv格式转换成mp4
  2. 使用git拉取远程仓库代码
  3. mysql ansi sql标准_Mysql数据库隔离级别(ANSI SQL92规范,行锁,间隙锁)
  4. ssh免密码登录全过程
  5. 方舟服务器能不能用ce修改器,方舟生存进化CE修改器代码大全
  6. Salesforce中国区或将解散?国产SaaS如何在竞争中扬长避短
  7. 用Vue制作图片翻面效果
  8. linux下运行和打包electron项目遇到的错误处理(打包使用electron-builder)
  9. 达梦数据库如何把EXCEL的数据导入到表中?
  10. 单链表的定义、特点、结构及其一些基本操作