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

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

原则指的是说话、行事所依据的准则。 “理论与实践的统一,是马克思主义的一个最基本的原则。原则处处不在,那我们编程的世界中又有着怎样的原则呢?在我们的大话设计模式中,介绍了六种原则,下面我们对这些原则进行一一讲解。

一、单一职责原则
一枚小小的环形戒指,一如永世不变的约定。戒指的爱情含义,令世间所有女性为之向往。香港戴瑞珠宝集团旗下品牌Darry Ring更将戒指的含义浪漫诠释,以一生仅有一枚的奇特规定,让每一枚戒指都有只有一个专属的承诺,唯一的一枚,是为此生挚爱保留。而这一切只源于Darry Ring对真爱的追求传播,见证更多真爱故事。香港戴瑞珠宝集团旗下极富盛名的求婚戒指品牌Darry Ring,以全球首创独树一帜绑定身份证定制钻戒形式,提出了“一生?唯一?真爱”的品牌理念。在此有最浪漫的购钻规定,每位男士凭借身份证仅可定制唯一一枚Darry Ring,赠予此生唯一挚爱。
Darry Ring品牌的创立初衷,旨在见证真爱,传播真爱理念。在浮华社会里,依然存留一方对纯净美好爱情的期待,而钻戒象征的坚贞与永恒便成为了最完美的信物。一生仅有一枚Darry Ring,因一生只爱一个人。真爱,是回归初心寻找到的一份难能可贵的美好。Darry Ring的可贵,在于传播了真爱唯一的理念,让拥有一枚Darry Ring的女人享有一份专属的幸福;并以此生唯一守护的安全感,庇护着每对恋人至真至美的爱情。一份真爱协议,承载的意义绝对不亚于一份结婚证书。签署下的是一生唯一的约定,名字将永远印记在协议上,不能修改、删除,需要一生信守承诺,呵护至极。

一如我们设计模式中的单一职责原则, 就一个类而言,应该仅有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到破坏。软件真正要做的许多内容,就是发现职责并把那些职责相互分离。如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责,就应该考虑类的职责分离。和我们的学习思想不谋而合,专注,高效,所以成功......

二、开放-封闭原则
历史走过了整整数百年。香港和澳门的回归有着划时代的意义,充分显示了按照“一个国家、两种制度”实现中国统一大业指导思想具有强大的生命力。所以,“一国两制”方针将能推进祖国的和平统一事业,实现祖国的完全统一和民族的全面振兴。
恰似我们的软件,学过软工的小朋友都知道,软件需求总是变化的,世界上没有一个软件的是不变的,因此对软件设计人员来说,必须在不需要对原有系统进行修改的情况下,实现灵活的系统扩展。所谓开放封闭原则就是软件实体应该对扩展开发,而对修改封闭。开放封闭原则是所有面向对象原则的核心。软件设计本身所追求的目标就是封装变化,降低耦合,而开放封闭原则正是对这一目标的最直接体现。开放封闭原则主要体现在两个方面:对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。对修改封闭,意味着类一旦设计完成,就可以独立其工作,而不要对类尽任何修改。
学习是为了更好的生活,愿看到这篇文章的小朋友对痛苦关闭,对快乐开放......

三、里氏代换原则
1988年,由麻省理工学院一位姓里的女士(Liskov)提出来,举个简单的例子,“猫”是抽象的猫,而黑猫和白猫是猫的具体子类,一只黑猫则是“黑猫”类的实例,一只白猫则是“白猫”类的实例,如果一个方法适用于猫,那么必然适用于白猫或者是黑猫。如果有一个方法,捉老鼠,这就是历史代换原则,如果对每个类型T1的对象01,都有类型为T2的对象02,使得T1定义的所有程序P在所有对象01都代换成02时,程序P的行为没有变化,那么T2为T1的子类型。

在项目中,采用里氏替换原则时,尽量避免子类的“个性”,一旦子类有“个性”,这个子类和父类之间的关系就很难调和了,把子类当做父类使用,子类的“个性”被抹杀——委屈了点;把子类单独作为一个业务来使用,则会让代码间的耦合关系变得扑朔迷离——缺乏类替换的标准。

 四、依赖倒转原则
所谓依赖倒置原则(Dependence Inversion Principle)就是要依赖于抽象,不要依赖于具体。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。
举个简单的例子,我们现在使用的电脑有各式的品牌,联想、神舟、戴尔等等,电脑需要用到鼠标,键盘;假设鼠标、键盘是针对某一个品牌的机器实现去做的话,那么我们将会遇到什么问题呢?那么我们市面上的键盘和鼠标就都是各式各样的,有一天鼠标,或键盘坏了,我们要怎么去买呢?难道记住这个电脑是什么品牌,什么型号,还有什么类型的去买么?这样会疯掉的。现在我们的电脑基本上都是使用USB接口的了,无论是键盘也好,鼠标也好,我们只要买USB接口的就可以使用了,同时,使用USB接口还可以有其他的扩展,只要实现了,这个接口,实现怎么样都没关系,例如,实现了USB接口的小台灯,只要接上USB线就可以照明了;又如实现了USB
接口的充电器,接到我们的电脑上就可以充电了。

高层模块不应该依赖低层模块,两者都应该依赖其抽象又如何理解呢?这个问题也可以这么问:为什么要叫倒转?呢?在面向过程的开发中,为了使用常用的代码可以复用,一般都会把这些常用的代码写成许许多多函数的程序库,这样我们做新项目的时候,就去调用这些函数就可以了。

五、迪米特法则
迪米特法则(Law of Demeter)又叫做最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。《老子》云:"小国寡民……邻国相望,鸡犬之声相闻,民至老死,不相往来。"将被统治的对象隔离开来,使它们没有直接的通信,可以达到分化瓦解,继而分而治之的效果。迪米特法则与老子的"小国寡民"的统治之术不谋而合。

六、合成/聚合复用原则
聚合表示一种弱的“拥有”关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。

优先使用对象的合成/聚合将有助于保持每个类的封装,并被集中在单个任务上。这样类和类继承层次会保持较小的规模,并且不太可能增长到不可控制的庞然大物。

后记
在我们的设计模式中,正是因为有了这些原则的存在,以及她们在代码中的灵活应用,让我们的软件更加富有创造力和生命力,单一职责原则--一生只爱你一个,开放--封闭原则-祖国统一,有你有我,你永远是我的不可分割,里氏代换原则--无论黑猫白猫抓到老鼠的猫都是好猫;依赖倒转原则--任你戴尔或是联想,我们有着相同的接口实现外部连接,迪米特法则--无为而治,小国寡民不谋而合,合成聚合--部分和整体需要好好把握....

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

大话设计模式之设计原则相关推荐

  1. 《Android之大话设计模式》--设计原则 第三章:开放封闭原则 孙悟空任弼马温一职

    应用场景举例: 孙悟空从东海龙宫拿到定海神针如意金箍棒后回到花果山,和自己的部下过着自由自在的生活.那只好景不长,因为他在地狱删除了自己和花果山所有猴子的名单,同时又拿走了定海神针,不久便被阎王和龙王 ...

  2. 设计一个矩形类rectangle_万字长文带你捋清六种设计模式的设计原则(建议收藏)...

    对于设计模式,自己很早之前就看了好多本设计模式书籍,其中一些还看了好几遍,也一直希望自己能在编码的时候把这些设计模式用上去.可是,在日常的打码中,用的最多的就是单例,其次是观察者和建造者模式 ( bu ...

  3. 设计模式 - 七大设计原则(一)

    设计模式 - 七大设计原则(一) 概述 简单介绍一下七大设计原则: 开闭原则:是所有面向对象设计的核心,对扩展开放,对修改关闭 依赖倒置原则:针对接口编程,依赖于抽象而不依赖于具体 单一职责原则:一个 ...

  4. Go设计模式(3)-设计原则

    上一篇文章Go设计模式(2)-面向对象分析与设计里讲过,做设计最重要的是保留合适的扩展点.如何才能设计出合适的扩展点呢? 这篇文章会讲解一下经典的设计原则.这些设计原则大家可能都听过,但可能没有想过为 ...

  5. 【设计模式】设计原则

    [设计模式]设计原则 在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率.节约软件开发成本和维护成本. 1 开闭原 ...

  6. 设计模式-六大设计原则(附加实际开发建议以及计算器例子)

    使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.设计模式使代码编制真正工程化,是软件工程的基石脉络,如同大厦的结构一样. 文章结构: 1.单一职责原则(SRP): 2.里氏替换原 ...

  7. Java设计模式-七大设计原则

    Java设计模式 设计模式七大原则 设计模式的目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好 代码 ...

  8. 后端学习 - 设计模式与设计原则

    文章目录 设计原则 1 单一职责原则 2 开闭原则 3 Liskov 替换原则 4 依赖倒置原则 5 接口隔离原则 6 迪米特法则 设计模式:创建型模式 1 工厂模式 2 抽象工厂模式 3 单例模式 ...

  9. systemverilog硬件设计及建模_UVM方法学与设计模式(一):从OOP的本质,设计模式到设计原则...

    面向对象编程(OOP)是业界使用非常广泛的一种编程范式.以C++的OOP为例,其包含通常我们所说的OOP三大要素:继承.封装和多态. C++ OOP 组成 C++的OOP内容相对来说比SystemVe ...

最新文章

  1. 美多后台管理和项目环境搭建
  2. mysql 级联同步不成功_MySQL级联复制的同步问题(一)
  3. Grunt 新手一日入门
  4. 第一阶段:Java基础之控制结构
  5. flask执行python脚本_如何在Flask中运行python脚本
  6. js vue将后台返回的url图片地址以图片形式保存到本地
  7. easyexcel 无模板写入_关于EasyExcel 的一些生成模板,导入导出的使用心得(优化版)...
  8. mysql sha256函数_MySQL8.0新特性——默认使用caching_sha2_password作为身份验证插件
  9. macos降级_iOS12.3 beta2更新了什么 iOS12.3测试版2新特性与升降级方法
  10. Tensorflow实现多元线性回归
  11. so文件动态加载注意事项
  12. 讲解开源项目:用 Python 生成有“灵魂”的二维码
  13. Javarscipt中数组或者字符串的随机排序方法
  14. 用Prolog解决爱因斯坦斑马问题
  15. Java ServiceLoader使用和解析
  16. css里的英文翻译,css常见英文翻译
  17. Linux的root权限安装nvm后可用,切换用户以后报nvm: command not found解决办法
  18. 你或许也想拥有专属于自己的AI模型文件格式(推理部署篇)-(8)
  19. Java字符串使用Split以竖线作为分隔符
  20. AngularJS之表格设置样式

热门文章

  1. 论文笔记:DeepReID: Deep Filter Pairing Neural Network for Person Re-Identification
  2. 拼多多关键搜索、商品列表接口、商品详情接口
  3. [loj6388] 「THUPC2018」赛艇 / Citing
  4. win10笔记本或电脑WLAN密码忘记了不怕,【win10】查看以前连接过的wifi密码
  5. 涛思数据库(二)——上手使用
  6. 最新引流脚本之窃语漂流瓶引流脚本,如何使用窃语脚本
  7. Linux企业应用——mysql(一)之mysql初始化、mysql与phpadmin、mysql主从复制
  8. 微型计算机系统核心hhg,计算机应用基础测试题1
  9. 关于JAVA的优势——跨平台和健壮性
  10. sin^k(x)的积分