离职了,在家温故而知新----1 设计模式 开头
工作四年有余,编写的代码都是业务代码。不涉及低层。
目前离职在家,过年完了,准备找工作了。
决定温故而知新,复习也是学习。
本着随遇而安的原则,从之前收集的众多复习条目中随意选择了一条开始复习。
设计模式
我本身并不是计算机科学系的专业,一焊电路板专业的,唯一与代码相关的是在大学学过公共的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 设计模式 开头相关推荐
- WebSpider的编码问题(乱码)浅析
这两天看到几篇关于WebSpider的文章.其中关于抓取网页出现的编码格式问题大家都比较感兴趣,以前在参与帮看网的开发时也遇到过.不过那时候忙于ITDB的BBS开发,没有时间去研究.今天看到解决网爬工 ...
- 啊哈哈哈,鸡(面)汤(经)来喽~(得物,B站,百度),附答案总结
文章目录 前言 得物 一面 闲聊 GRPC GO B站 一面 闲聊 领域驱动设计(DDD) Go 编程题 二面 DDD 数据库 设计模式 编程题 三面 闲聊 百度 一面 闲聊 领域驱动设计 GO 网络 ...
- SpringBoot 整合:Redis延时队列的简单实现(基于有赞的设计)
点击关注公众号,Java干货及时送达 来源:blog.csdn.net/qq330983778/article/details/99341671 设计 之前学习Redis的时候发现有赞团队之前分享过一 ...
- IntelliJ IDEA 2021.1正式发布!快来看看又有哪些神仙功能加入!
点击关注公众号,Java干货及时送达 来源:juejin.cn/post/6948605799790805005 先点赞再看,养成好习惯 IntelliJ IDEA 2021.1 EAP版本已经发布了 ...
- Redis分布式锁使用不当,酿成一个重大事故,超卖了100瓶飞天茅台!!!
点击关注公众号,Java干货及时送达 来源:juejin.cn/post/6854573212831842311 基于Redis使用分布式锁在当今已经不是什么新鲜事了. 本篇文章主要是基于我们实际项目 ...
- SpringCloud 2020版本教程2:使用spring cloud gateway作为服务网关
点击关注公众号,Java干货及时送达 Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关.网关作为流量的,在微服务系统中有着非常作用,网关常见 ...
- SpringCloud 2020版本教程1:使用nacos作为注册中心和配置中心
点击关注公众号,Java干货及时送达 本次教程旨在为读者提供2020版本的最佳实践方案,使用我认为最容易学习的组件,可能很多组件有很多替代方案,在这里不依依讲述.本次教程使用的组件如下: 注册中心:n ...
- SpringCloud 2020版本教程3:使用sentinel作为熔断器
点击关注公众号,Java干货及时送达 什么是sentinel Sentinel,中文翻译为哨兵,是为微服务提供流量控制.熔断降级的功能,它和Hystrix提供的功能一样,可以有效的解决微服务调用产生的 ...
- SpringCloud 2020版本教程4:使用spring cloud sleuth+zipkin实现链路追踪
点击关注公众号,Java干货及时送达 Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案,并且兼容支持了 zipkin,你只需要在pom文件中引入相应的依赖即可. 微服 ...
最新文章
- 2021夏季每日一题 【week6 完结】
- java的set接口_Java集合-Set接口
- echart实例数据 本地加载_JVM 类加载概述
- 『原创』.Net CF下ListView的数据绑定
- oracle菜鸟学习之 复杂的更新语句使用
- c++ 调用python_闲话python 48: C/C++扩展Python与Swig工具
- 抖音直播引流的最快方法是什么?就简单两招破500人!
- 简单讲解JSONP的跨域原理
- 新事业,新征程:换屏哥,您身边的手机维修专家
- 置信区间 置信水平 边际误差
- python从0到1_从0到1的Python学习经验
- 微信小程序rich-text富文本图片自适应处理
- 数据库系统概论--读书笔记--8 关系运算: 选择 投影 连接 除运算
- VBA数据类型和类型转换函数
- 计算机语言学国外排名,美国语言学专业排名
- oppo怎么广告接入_oppo信息流广告投放操作指南
- “技能成就梦想 创新促进发展”2016年成德绵创新改革试验区第二届高技能人才交
- 808 数据结构 绪论
- 0x55555555,0xaaaaaaaa...等究竟是什么?
- HTML中模仿infini网界面所做的网页界面