工作四年有余,编写的代码都是业务代码。不涉及低层。

目前离职在家,过年完了,准备找工作了。

决定温故而知新,复习也是学习。

本着随遇而安的原则,从之前收集的众多复习条目中随意选择了一条开始复习。

设计模式

我本身并不是计算机科学系的专业,一焊电路板专业的,唯一与代码相关的是在大学学过公共的C语言基础。

复习就不多BB以前的东西了。

总结过往:

工作中使用到设计模式的地方还是有不少的,只不过疏于归纳与统计。

同时也是由于工作中需要满足的情况往往比较复杂与实际,所以多使用的是由多种设计模式组合而成的混合模式。

我这里想特别的说一下自己看法:

所谓的设计模式,其实更多是前人多各种编程集成方案的归纳和总结,冠以形象的名称方便后人套用。

归根结底,无非是由语言特性的支持,加上面向对象、面向函数、面向接口的思想,组合而成的连招。

但如果过于拘泥于招式本身,就脱离了设计模式的初衷了。

封装,接口的实现,反射,有这些东西,无所谓设计模式,一样能写出达到低耦合,高复用,易扩展易维护的代码。

而设计模式不也是这个目的么。

所以,学习设计模式的最终目是学习这种编写代码设计业务的思路,最后心中去掉所谓设计模式这种概念,使用语言的基本针对实际编写最合适的代码,方为大成。

学习总结:

我这里不细讲设计模式的具体内容,事实就是百度资源一大堆,但实际就是你顺着看完明天就会忘,所以我只总结设计模式的核心依赖技术,与实现需求的大原则。

(by the way : 我自己看的这本书《大话设计模式》)

所谓核心:

抽象,封装,继承,多态,反射

所谓原则:

1、开放封闭原则(OCP,Open Closed Principle)是所有面向对象原则的核心。(对抽象编程,不对具体编程。已达到易扩展易为维护的目的)

2、单一职责原则(SRP:Single responsibility principle)又称单一功能原则,面向对象五个基本原则(SOLID)之一。(功能原子化,最小粒度化。讲单一的功能封装到类或模块中,提供接口给外部调用)

3、依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。

4、里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。(后面文字复制的百度,我这里想到的是,想想Spring属性注入,为什么在被注入的类中,声明属性的时候总是并且一定是以接口声明) 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

5、合成/聚合复用原则(CARP),说简单点,继承复用少用,因为破坏了父类的封装。多用接口的实现。

6、迪米特法则(Law of Demeter)又叫作最少知道原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。(说白了,另一种减少耦合的思想)

针对以上描述的原则,可以自己去百度更详细官方定义。我自己总结如下:

1、少用继承多用实现(这样才能灵活)

2、功能最小粒度化,实现原子封装(这样才好复用好扩展)

3、面向协议开发,面向接口开发,抓住头尾即可(入参出参或者请求回调都是如此)

(最后说一句,现在比较流行的SOA架构,也就是所谓的面向服务架构,其实就是抽象接口/制定协议,利用接口串联业务,具体怎么实现,那是你项目里面的事。这里的项目往小了说是代码模块类,往大了说就是ServiceProvider,这种思路正是上述原则的完美体现)

转载于:https://www.cnblogs.com/braba/p/6368164.html

离职了,在家温故而知新----1 设计模式 开头相关推荐

  1. WebSpider的编码问题(乱码)浅析

    这两天看到几篇关于WebSpider的文章.其中关于抓取网页出现的编码格式问题大家都比较感兴趣,以前在参与帮看网的开发时也遇到过.不过那时候忙于ITDB的BBS开发,没有时间去研究.今天看到解决网爬工 ...

  2. 啊哈哈哈,鸡(面)汤(经)来喽~(得物,B站,百度),附答案总结

    文章目录 前言 得物 一面 闲聊 GRPC GO B站 一面 闲聊 领域驱动设计(DDD) Go 编程题 二面 DDD 数据库 设计模式 编程题 三面 闲聊 百度 一面 闲聊 领域驱动设计 GO 网络 ...

  3. SpringBoot 整合:Redis延时队列的简单实现(基于有赞的设计)

    点击关注公众号,Java干货及时送达 来源:blog.csdn.net/qq330983778/article/details/99341671 设计 之前学习Redis的时候发现有赞团队之前分享过一 ...

  4. IntelliJ IDEA 2021.1正式发布!快来看看又有哪些神仙功能加入!

    点击关注公众号,Java干货及时送达 来源:juejin.cn/post/6948605799790805005 先点赞再看,养成好习惯 IntelliJ IDEA 2021.1 EAP版本已经发布了 ...

  5. Redis分布式锁使用不当,酿成一个重大事故,超卖了100瓶飞天茅台!!!

    点击关注公众号,Java干货及时送达 来源:juejin.cn/post/6854573212831842311 基于Redis使用分布式锁在当今已经不是什么新鲜事了. 本篇文章主要是基于我们实际项目 ...

  6. SpringCloud 2020版本教程2:使用spring cloud gateway作为服务网关

    点击关注公众号,Java干货及时送达 Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关.网关作为流量的,在微服务系统中有着非常作用,网关常见 ...

  7. SpringCloud 2020版本教程1:使用nacos作为注册中心和配置中心

    点击关注公众号,Java干货及时送达 本次教程旨在为读者提供2020版本的最佳实践方案,使用我认为最容易学习的组件,可能很多组件有很多替代方案,在这里不依依讲述.本次教程使用的组件如下: 注册中心:n ...

  8. SpringCloud 2020版本教程3:使用sentinel作为熔断器

    点击关注公众号,Java干货及时送达 什么是sentinel Sentinel,中文翻译为哨兵,是为微服务提供流量控制.熔断降级的功能,它和Hystrix提供的功能一样,可以有效的解决微服务调用产生的 ...

  9. SpringCloud 2020版本教程4:使用spring cloud sleuth+zipkin实现链路追踪

    点击关注公众号,Java干货及时送达 Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案,并且兼容支持了 zipkin,你只需要在pom文件中引入相应的依赖即可. 微服 ...

最新文章

  1. 2021夏季每日一题 【week6 完结】
  2. java的set接口_Java集合-Set接口
  3. echart实例数据 本地加载_JVM 类加载概述
  4. 『原创』.Net CF下ListView的数据绑定
  5. oracle菜鸟学习之 复杂的更新语句使用
  6. c++ 调用python_闲话python 48: C/C++扩展Python与Swig工具
  7. 抖音直播引流的最快方法是什么?就简单两招破500人!
  8. 简单讲解JSONP的跨域原理
  9. 新事业,新征程:换屏哥,您身边的手机维修专家
  10. 置信区间 置信水平 边际误差
  11. python从0到1_从0到1的Python学习经验
  12. 微信小程序rich-text富文本图片自适应处理
  13. 数据库系统概论--读书笔记--8 关系运算: 选择 投影 连接 除运算
  14. VBA数据类型和类型转换函数
  15. 计算机语言学国外排名,美国语言学专业排名
  16. oppo怎么广告接入_oppo信息流广告投放操作指南
  17. “技能成就梦想 创新促进发展”2016年成德绵创新改革试验区第二届高技能人才交
  18. 808 数据结构 绪论
  19. 0x55555555,0xaaaaaaaa...等究竟是什么?
  20. HTML中模仿infini网界面所做的网页界面

热门文章

  1. 谈谈Q+平台的技术实现
  2. 关于农村医疗保险的了解
  3. Twitter CEO辞任,硅谷印度裔高管再添一人
  4. matlab mda,MATLAB中最基本函数plot()的用法
  5. Matlab计算并绘制点云的法向量和曲率
  6. Virtuoso617 版图入门
  7. 如何找回IOS访问限制密码
  8. 如何对AD和Exchange进行安全加固满足护网需要?
  9. 微信公众号开发学习笔记(一)公众号分类
  10. 如何优雅的保护 Kubernetes 中的 Secrets