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

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

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

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

设计模式

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

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

总结过往:

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

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

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

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

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

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

封装,接口的实现,反射,有这些东西,无所谓设计模式。

一样能达到低耦合,高复用,易扩展易维护的目的。而设计模式不也是这个目的么。

学习总结:

我这里不细讲设计模式的具体内容,(我自己看的这本书《大话设计模式》

只总结设计模式的核心依赖技术,与实现需求的大原则。

所谓核心:

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

所谓原则:

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、面向协议开发,面向接口开发,抓住头尾即可(入参出参或者请求回调都是如此)

离职了,在家温故而知新----1 设计模式 & 开头的更多相关文章

  1. 2020 重新出发,JAVA 学习计划

    ------ @[toc]# 前言 我呢已经工作七年了,一直没有换工作,因为我这个人没什么太大的野心,安安稳稳的生活就挺好,目前的公司虽然福利一般,但是工作稳定,环境也都很熟悉了. 但是今年,到目前为 ...

  2. MVC缓存

    MVC入门系列教程-视频版本,已入驻51CTO学院,文本+视频学效果更好哦.视频链接地址如下: 点我查看视频.另外,针对该系列教程博主提供有偿技术支持,群号:226090960,群内会针对该教程的问题 ...

  3. Hammer.js

    一.前言 移动端框架当前还处在初级阶段,但相对于移动端的应用来说已经有很长时间了.虽然暂时还没有PC端开发的需求量大,但移动端的Web必然是一种趋势,在接触移动端脚本的过程中,最开始想到的是juqer ...

  4. jquery触屏幻灯片

    一.前言 去年接触了移动Web开发,做了些手机端的网站及应用,还有些小的微信游戏和活动页面.每个项目里或多或少的都会有一些触屏事件等.其中有两个用到了jquery触屏幻灯片.刚开始的时候也在百度上搜索 ...

  5. 无废话WCF入门教程六[一个简单的Demo]

    一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来 ...

  6. 无废话SharePoint入门教程四[创建SharePoint母版页]

    一.前言 文章成体系,如果有不明白的地方请查看前面的文章. 二.目录 1.创建HTML页面 2.将HTML文件转换为SharePoint母版页 3.在 SPD中修改母版页“PlaceHolderMai ...

  7. 无废话SharePoint入门教程一[SharePoint概述]

    一.前言 听说SharePoint也有一段时间了,可一直处在门外.最近被调到SharePoint实施项目小组,就随着工作一起学习了一下实施与开发.但苦于网上SharePoint入门的东西实在太少,导致 ...

  8. IHttpHandler的那些事

    写在前面 从上家公司离职,在家休息,闲着无聊,觉得还是有必要将IHttpHanlder的内容,做一个总结.发现在写demo的过程中,总觉得有点生疏了,项目中很少使用自定义的类来实现该接口.当然,一般处 ...

  9. C++中一个类(非继承类)对象,所占内存空间大小

    离职后在家里带了半年多了,这半年多里没有编写过一行代码,倒是看过一些书,但是差不多也都是囫圃吞枣.房子也快要装修,也得赶快找一个工作了,不然养车,还要玩摄影,没收入的日子真是不好过啊.呵呵. 按惯例, ...

随机推荐

  1. EasyUI中dialog中嵌入form细节问题记录

    当代码如下: function myClear() { $("#add_form").form("reset"); $("#add_dialog&qu ...

  2. NIPS 2016论文:英特尔中国研究院在神经网络压缩算法上的最新成果

    NIPS 2016论文:英特尔中国研究院在神经网络压缩算法上的最新成果 http://www.leiphone.com/news/201609/OzDFhW8CX4YWt369.html 英特尔中国研 ...

  3. 实战3--项目开始--准备:::资源分类, 日志系统, 写BaseDao

     项目资源分类: 1.   package: base, dao, dao.impl, domain, service, service.impl, util, view.action 2.   co ...

  4. 模块之dir函数

    dir()函数你可以使用内建的dir函数来列出模块定义的标识符.标识符有函数.类和变量.当你为dir()提供一个模块名的时候,它返回模块定义的名称列表.如果不提供参数,它返回当前模块中定义的名称列表. ...

  5. mysql trouble shooting---- 从库停止同步lock_wait_timeout_exceeded_try_restarting_transaction

    问题描述: 数据库从库停止同步. 问题分析: show slave status\G;(也可使用show full processlist) 显示 某个update语句出错,Lock wait tim ...

  6. Codeforces#355

    大小号刷题,大号,被查重,悲剧,最后小号过了3题 A题: 分析:大于h的+2,小于等于h的+1 #include <iostream> #include <cstdio> #i ...

  7. Handler和Message以及Looper之间的三角关系

    说到Handler想必大家都经常用到,在非UI线程更新UI那可是利器,用起来也非常容易上手 从使用上来说,我们只需要关注sendMessage和handleMessage即可 所以我们先从Handle ...

  8. 22、手把手教你Extjs5(二十二)模块Form的自定义的设计[1]

    下面开始设计和完成一个简单的Form的自定义过程.先准备数据,在ModuleModel.js中的data属性下面,加入自定义Form的参数定义,下面的代码中定义了一个新的属性tf_formScheme ...

  9. <Natural Language Processing with Python>学习笔记一

    Spoken input (top left) is analyzed, words are recognized, sentences are parsed and interpreted in c ...

  10. UVA 11551 Experienced Endeavour

    矩阵快速幂. 题意事实上已经告诉我们这是一个矩阵乘法的运算过程. 构造矩阵:把xi列的bij都标为1. 例如样例二: #include<cstdio> #include<cstrin ...