大话设计模式,重构-改善既有代码的设计读后感(附PDF百度云)

先提供一下两本书百度云PDF链接

《大话设计模式》百度云链接:https://pan.baidu.com/s/1UmR9Mu5mY89QGl2FTKAVsw 密码:plc2

《重构-改善既有代码的设计》百度云链接:https://pan.baidu.com/s/1bSSvX7zutt361SJ0Tqe4TQ 密码:tmdh

《大话设计模式》

总结起来就是善用抽象类、接口、封装、多态继承等将各个功能类进行分割。所有的设计模式肯定不能全部学以致用,只要满足一些优秀程序设计基本点即可,无论是用什么设计模式,比如,一个优秀的程序是具有良好的复用性和重构性,需要增加功能时,不要牵扯到改很多地方,这就需要把功能独立出来。

面向对象五大原则:

1.单一职责:一个类只负责一个职责。目的在于解耦增强内聚。原文中强调“就一个类而言,应该仅有一个引起它变化的原因”

2.开闭原则:对于扩展是开放的,对于修改是关闭的。允许扩展不允许修改,当底层写好时就不要再修改底层了,修改底层的结果很可能导致其他人的扩展失败,或者扩展方式的变动。一个类只应该因为错误而被修改,而不因为扩展修改。可利用多态、抽象类等实现扩展,超类不应该做改变。能够一直在最开始的版本基础上更新版本出新产品。

3.里氏替换原则:子类必能代替父类。最经典问题,企鹅是鸟,企鹅不会飞,企鹅作为子类但是不能完全代替父类鸟,这就存在问题了,通过接口或抽象类将父类和子类分离,如下图。此时,鸟(高层模块)通过接口写一个飞的方法,企鹅(低层模块)继承于此,但是在详细模块中在写不能飞,于是实现继承但可替换。原文中的话是“由于子类型的可替换性才使得父类类型的模块在无需修改的情况下就可以扩展”。

大话设计模式,重构-改善既有代码的设计读后感(附PDF百度云)_第1张图片

4.依赖倒转原则:高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象;抽象不应该依赖于具体实现,具体实现应该依赖于抽象。图可用上图加以理解。

5.接口隔离原则:一个类对另一个类的依赖应该建立在最小的接口上,使用多个专门的接口比使用单一的总接口要好。简言之就是,接口功能详尽一些,接口数量可以多一些。

这就是一个程序需要分成什么视图层,逻辑层,数据层等的基本原理,如果有需要修改,修改对应部分即可,一个优秀的程序能够满足五大原则。附带介绍下六大设计模式,除上述5个外:

6.迪米特原则(最小知识原则):一个对象应当对其他对象有尽可能少的了解。比如,总经理发布任务,部门经理再将任务给你,所传递的信息在于任务,总经理这个对象根本不需要与你有所交集,就不要传递任何信息,甚至说部门经理这个身份信息你都不应该知道,才满足迪米特原则。

其实,无论采用什么设计模式,主要任务在于程序需要很好的复用性、重构性、维护性,当出现问题时,都能很方便的去修改删除增加而不影响基础代码,基础功能,这才是设计的关键所在。

《重构-改善既有代码的设计》

1.好的程序是给人看的,而不是单单给机器,所以好的变量命名是需要的,值得重构

2.“事不过三,三则重构”,现在我正在做一个涉及下载EXCEL的项目,目前在两处地方需要导出表格,但是由于表格内数据是不一样的,表头、数据都不一样,所以我也在思考重构的价值,看到书里这句“事不过三,三则重构”一下就清晰了,确实,但次数较少重构的价值就很一般了,但是如果次数很多就有必要重构了。重构的流程是:开发增加新功能-->再开发增加同样新功能-->重构-->测试-->继续开发增加新功能

3.推荐建立JUNIT测试体系,暂时无感

4.概括:

第五章“重构列表”,参数按照列表形式传递,检测重构每一个节点,

第六章“重新组织函数”,函数不应过长等,合理的分解或者融合两个函数,传递参数也应尽可能少而完整。包括基础原则,不要把传入的参数,修改值后又返回

//错误示范
public int wrong(int input){
    if(input>5) 
        input=1;
    return input;
}
//正确
public int correct(int input){
    int returnInt = input;
    if(input>5)
        returnInt=1;
    return returnInt;
}

第七章“在对象之间搬移特性”,合理的将对象的特性搬移,比如封装是否公开等特性或者某些参数可以相互转移

第八章“重新组织数据”,数据采用private或是public(私有化便于数据灵活应用,公有化便于代码简单使用简单)等, 用对象代替字符和数组,善用常量等

第九章“简化条件表达式”,合理使用与或非,正则表达式等,用break移除标记参数等

第十章“简化函数调用”,最重要的接口概念,一个接口所暴露的事情不宜过多,书中强烈推荐查询和修改接口要分开。合理添加和删除参数,通过参数合并相似函数

第十一章“处理概括关系”,及处理继承关系,字段、函数、构造函数上移下移简言之就是字段函数是放在父类还是子类要明确,提炼子类、超类等

第十二章“大型重构”,过程型转变为对象型,分层架构,梳理提炼继承

 

总之,只要你的程序易读,易修改,符合逻辑,程序的需求就达到了,无论是用继承,多态或者其他方法。明确目标,粗略的看这些重构方法,让你在重构时有迹可循。

 

你可能感兴趣的:(#,JavaWeb)