先列了个架子,还没写完,争取明天写完!!!

1. 什么是设计模式


设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 —— [ 百度百科 ]

简单地讲“设计模式”就是[经验的总结],按照这些经验去办事,可以让你的代码有更好的[重用性],增加[可维护性]
先贤们在码代码的过程中,栽过不少坑,碰过不少头,需求频繁的变更,代码不停的修改。终于有一天,顿悟升仙,悟出了其中的[套路],当然悟出的套路不止一个,总共[23]式,就像武功秘籍有“拳法”、“腿法”,“摔法”等等。设计模式的这23个套路,各有专攻,解决不同场景的问题。

2. 设计模式6大原则


如果再将这23种行,抽象为神,也就是思想,也就有了设计模式的[6]大原则。 这6大原则好比内功心法中的《九阳神功》,乃所有武学精要之所在。能理解多大的深度,它就有多大的威力,如同圣斗士星矢的小宇宙一般,无穷无尽。
记住一点:所有的这些原则都是站在面向对象的基础之上扯出来的,这可能是句废话,但却是是句有用的话。

下面稍微扯一下面向对象和面向过程,以及面向对象的[3]大特征[封装][继承][多态]

我们可以这样简单的理解面向对象和面向过程:
[面向对象]:站在人类的角度看问题,思考问题,解决问题
[面向过程]:站在机器的角度看世界,看人生,看价值
比如我们看到一个小鹿,怎么描述它呢?有腿,有嘴,有尾巴。腿可以跑,嘴可以叫,尾巴可以摇。这就是面向对象的思维,看到一个事物的时候,首先想到的是他有哪些属性,有哪些功能,然后讲这些属性和功能[封装]成一个对象(鹿)。随后我们又看到一头牛,牛同样也有腿,有嘴,有尾巴。思考片刻,又顿悟出一条,对,它们有共性,我们可以先将这种共性用“动物”这个名词表示。不管是鹿还是牛,都具有“动物”的特征(有腿,有嘴,有尾巴。腿可以跑,嘴可以叫,尾巴可以摇。)。它们都[继承]于“动物“,通俗的讲,就是它们都是动物,只不过在编程中,构造了“继承”这个词来表示这种关系。指鹿为牛。。。^^。虽说都属于动物,都会用嘴叫,但叫声还是有差别的。鹿的叫声是。。。;牛的叫声是。。。请各位脑补画面。这就引出了另一个概念[多态]。动物们都会叫,但不同的动物叫声是不一样滴,这就是多态^^。多态又分“重载”和“覆写“。[重载]相当于自己折腾自己,比如鹿叫,被狼追的叫声和追母鹿的叫声,绝对不在一个频道。[覆写]相当于坑爹,当爹的制定了行为准则,当儿子的就不按他爹那一套办。比如老爹定义了”学习“是要看书写字。但到儿子这里“学习”就成了打怪升级。
注意折腾的主体不一样,重载是想着法的让自己的同一个行为,有不同的表现形式,覆写是想着法的让子类的行为和父类的行为不一致,偏重折腾父类,父类已经订好了,你不用,非得自创一派。

机器不管这些,不会将有腿,有嘴,有脚,和能跑,能吃,能攻击封装成一个鹿,它只管这一步做什么,下一步做什么。

设计原则 简介
单一原则 职责单一
里氏替换 怎么写继承
依赖倒置 面向接口编程
接口隔离 接口精简最小
迪米特 只与直接朋友通信
开闭原则 扩展开放,修改封闭

2.1单一原则


就一个类而言,应该仅有一个引起它变化的原因

简单的讲,就是功能单一
好处:通过减少耦合性、功能分离,可以提高可维护性,易扩展,易复用
例子:毕昇老先生的活字印刷术,每个胶泥块只刻一个字。如果印刷的时候,发现某个字刻错了,只需重新刻这一个字就好,不影响其他的文字。试想,如果将不同的字刻在同一个胶泥块上,若其中一个有错,就需要重新刻录全部的,而且原先已经刻对的,在重刻的过程中,也有被刻错的可能。

2.2 里氏替换


子类型必须能够替换掉它们的父类型

简单的讲就是父类型引用可以指向类型引用
好处 : 可以使用父类型引用代表一大坨子类型,针对父类型编程,可以提高代码的通用性。
例子: 龙生九子,九个孩子,都可以由龙做代表去谈业务,谈合作。

2.3 依赖倒置


i>高层次模块不应该依赖底层次模块,两个都应该依赖抽象
ii>抽象不应该依赖细节,细节应该依赖抽象

简单的讲就是面向接口编程,细节是多变的,现对于细节,抽象出来的东西要稳定许多。
例子: 电脑的USB接口,不同品牌电脑的USB接口,可以插不同品牌的U盘。大家在生产电脑和U盘前,先将USB接口定义好,电脑厂商按照指定的USB接口集成USB,U盘厂商按照指定的接口生产U盘,那么之后,不管是电脑更新升级换牌子,也不管U盘更新迭代换牌子,都可以插入电脑正常使用。

2.4 接口隔离


客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上

简单的讲就是接口精简最小,比如一个类实现一个接口,接口有10个方法,但实际只需要实现其中的2个方法,另外的8个方法根本不需要。但按照语法还得增加这8个方法的实现,这就很不合适。遇到这种情况,可以讲接口拆分成更小的功能模块。

2.5 迪米特


如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。如果其中一个类要调用另一个类的某一个方法的话,可以通过第三者转发这个调用

简单的讲就是只与直接朋友通信,哪些是直接的朋友呢?成员变量、方法参数、方法返回值中的类,而出现在局部变量中的类则不是直接的朋友。这样做是为了降低耦合,实现高内聚。
例子: 比如你是做网管软件的,遇到了设备问题,需要设备的人看下,最好的办法,是找设备的老大,说明问题,让他去协调人力去解决,而不是自己去找下面的人来回扯来回推,因为这事让谁做,不让谁做,谁有时间做,你是协调不来的,也很容易遇到其他问题。将这些细节,交给第三者(设备老大)去做,不与设备开发人员直接联系。

2.6 开闭原则


软件实体(类、模块、函数等等)应该可以扩展,但不可以修改

简单的讲就是对修改封闭,对扩展开放
这个测试最有感触,刚对这个模块功能测试完,结果开发又改了代码,所有的测试都得再跑一边。但如果只是扩展新功能,只需要增量测试即可。

闭上眼睛,仔细的想一下,你会发现,上面讲的5种原则也都遵循了开闭原则。

装饰者模式


装饰者模式

dsfsd

使用场景

UML

代码实例

代码块语法遵循标准markdown代码,例如:

@requires_authorization
def somefunc(param1='', param2=0):'''A docstring'''if param1 > param2: # interestingprint 'Greater'return (param2 - param1 + 1) or None
class SomeClass:pass
>>> message = '''interpreter
... prompt'''

建造者模式


建造者模式

qqq

使用场景

UML

代码实例


二者区别

二者区别

博客文章会同步到微信订阅号“Java技术博文”,有兴趣的小伙伴可以关注,每周会同步更新一次博客。

装饰者模式 VS 建造者模式相关推荐

  1. 2015-03-12---外观模式,建造者模式(附代码),观察者模式(附代码),boost库应用

    今天白天主要看了boost库的应用,主要是经常使用的一些库,array,bind,function,regex,thread,unordered,ref,smartpointers库,晚上看了看设计模 ...

  2. 23种设计模式之单例模式、工厂模式、原型模式、建造者模式

    系列文章目录 第一章:程序设计原则-单一职责.接口隔离.依赖倒置.里式替换 第二章:程序设计原则-开闭原则.迪米特法则.合成复用原则 文章目录 系列文章目录 一.设计模式简单介绍 1.1.什么是设计模 ...

  3. 设计模式:工厂模式和建造者模式

    工厂模式和建造者模式都是创建型模式,说白了都是为了创建对象为目标用途的设计模式.肯定会拿来比较,一般来说肯定是工厂模式更易懂,使用在平时的项目中更顺手.而建造者模式,更多是创建一个对象,要给这个对象给 ...

  4. 工厂模式与建造者模式

    工厂模式和建造者模式都属于创建型模式,它对类的实例化进行了抽象,能够使软件模块做到与对象的创建和组织无关. 简单工厂模式 专门定义一个类来负责创建其他类的实例,通常根据自变量的不同而返回不同的类的实例 ...

  5. 面试官都爱问的java模式之建造者模式!!!

    开心一刻: 同事妻管严,零花钱少的可怜,今天一起打牌他输了400块没钱了.想想也可怜,就请他吃饭,吃饭时他说兄弟借十块钱吧,买张请柬回去好报帐,我当时就呆了,又TM学会一招... 简言: 建造者模式定 ...

  6. java设计模式之原型模式和建造者模式的写法(二)

    背景 原型模式和建造者模式属于创建型模式,在开发中经常会用到,那么这两种设计模式是怎么写的呢,下面进行代码演示. 原型模式 原型模式的核心就是复制 package com.example.protot ...

  7. 设计模式之---工厂模式、建造者模式

    ☺ 对于工厂模式,个人学习需要掌握 注意答案的重点标黑了.对于工厂模式.建造者模式,掌握,我下面这几点就很棒棒. 一.工厂模式 1.什么是工厂模式:[关键字factory] 答:创建对象时,不直接ne ...

  8. 创建型模式:建造者模式

    前方高能:<一故事一设计模式>PDF 电子书已经上线,关注公众号即可获取. 个人公众号原文: 创建型模式:建造者模式 五大创建型模式之四:建造者模式. 简介 姓名 :建造者模式 英文名 : ...

  9. 不蹭热度了,传统生成器模式(建造者模式)——Builder Pattern

    不蹭热度了,传统生成器模式(建造者模式)--Builder Pattern 生成器模式 组成 Product IBuild Builder Director 总结 生成器模式 实际中,更新任何类都可以 ...

  10. [设计模式](二)外观模式和建造者模式的区别

    网上博客很多使用KFC套餐来做的例子,讲述地不够贴切,觉得容易误导读者,在那个例子中KFC的套餐(ConcretedBulider)的具体内容被消费者(Client)清楚地了解且也是其关心的点,但是在 ...

最新文章

  1. Python的list中的选取范围
  2. HTML在日期单元格添加小图片,如何给图片添加上文字、日期和自己名字的小水印呢?...
  3. POJ3264Balanced Lineup(线段树)
  4. 關于dotNet開發中的框架思考
  5. 用html和CSS做个人简历
  6. 后台事务自动跳转工作流节点
  7. VMware 的安装和破解密码
  8. 如何快速用密钥登录服务器
  9. 如何提升固定资产盘点效率
  10. 小米其实已在悄悄涨价了,用户反应不一
  11. 计算机存储单位:bit, Byte, KB, MB, GB, TB, PB, EB, ZB, BB
  12. obs摄像头模糊_用OBS如何直播 照着学就行了
  13. 对抗生成神经网络-GAN通俗理解
  14. PWM直流马达速度控制
  15. Git 中 git restore 的使用
  16. 南京邮电大学离散数学实验三(传递性,自反性,对称性)
  17. 网络操作系统和应用服务器考点,网络操作系统与应用服务器配置
  18. 代码优化就一个原则-消除冗余
  19. 电脑双开微信的脚本 (Windows系统)
  20. 新浪微博站内应用开发(网站类)

热门文章

  1. 从旅行箱到旅行美学品牌,ITO获数千万A轮融资
  2. mysql 聚合函数内比较运算符_MySQL 聚合函数、运算符操作、约束
  3. php编程读书笔记,php3小时快速入门-读书笔记
  4. 中国互联网十五年的22个创新模式
  5. VNote中公式插件MathJax不显示换行解决
  6. CentOS7安装部署数据库oralce19C
  7. DTCC 2021 黄东旭:从 DB 到 DBaaS,数据库技术的当前和未来
  8. 微信小程序上传图片写法
  9. Win10离线安装.NET Framework 3.5的方法 (附cab格式离线安装包下载)
  10. 搞懂drag 和 drop