3.1软件系统的可维护性

一个软件系统设计的可维护性较低,即随着性能要求的变化而"腐烂“的真正原因有四个:过于僵硬、过于脆弱、复用率低、黏度过高。

过于僵硬:牵一发而动全身,无法轻易插入新的功能模块。

过于脆弱:蝴蝶效应,修改一处代码,引起其他地方不可预测的故障

复用率低:轮子和各处牵扯太多,无法复用,导致到处都有新造的轮子

黏度过高:不能保存原始设计意图和原始设计框架,让程序员更倾向于用特例的方式硬插入新代码满足眼前的需求。说明系统的黏度过高。

好的系统设计应有如下性质:可扩展性、灵活性、可插入性

可扩展性:可方便增加新的性能

灵活性:允许代码修改平稳的发生,不会波及其他模块

可插入性:接口化,实现类可方便替换,如零件的标准化

3.2系统的可复用性

复用亦即重用,可提高生产效率、提高软件质量、改善系统的可维护性

传统的复用:代码的拷贝粘贴、算法的复用、数据结构的复用

有的复用可提高可维护性,有的复用破坏了可维护性,因此支持可维护性的复用才是设计的准则

面向对象的复用:从算法和数据结构的层面上升到宏观的商业逻辑的抽象层次上

对可维护性的支持

适当提高可复用性,可提高系统的可扩展性。有赖于:”开-闭“原则,里氏代换原则、依赖倒转原则、组合/聚合复用原则。

适当提高可复用性,可提高系统的灵活性。有赖于”开-闭“原则、迪米特法则、接口隔离原则。

适当提高可复用性,可提高系统的可插入性。有赖于:”开-闭“原则,里氏代换原则、依赖倒转原则、组合/聚合复用原则。

设计原则:

  • ”开-闭“原则 OCP
  • 里氏代换原则 LSP
  • 依赖倒转原则 DIP
  • 接口隔离原则 ISP
  • 组合/聚合复用原则 CARP
  • 迪米特法则 LoD

3.3老子论不武

善为士者不武。好的系统设计师设计好的系统,维护时不需要让人大动干戈

天下有道,走马以粪,天下无道,戎马生于效。好的设计,维护成本低;差的设计,维护人员疲于奔命

转载于:https://my.oschina.net/wbilly/blog/738594

重读《JAVA与模式》之二相关推荐

  1. Java设计模式(十二) 策略模式

    策略模式介绍 策略模式定义 策略模式(Strategy Pattern),将各种算法封装到具体的类中,作为一个抽象策略类的子类,使得它们可以互换.客户端可以自行决定使用哪种算法. 策略模式类图 策略模 ...

  2. Java 设计模式之工厂模式(二)

    原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...

  3. java基础语法(二)--单列模式

    java基础语法(二)--单列模式 /*** 功能:单列模式* @author Administrator**/ public class SingletonTest {public static v ...

  4. 《JAVA与模式》之装饰模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述装饰(Decorator)模式的: 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替 ...

  5. 《JAVA与模式》之策略模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述策略(Strategy)模式的: 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它 ...

  6. 《JAVA与模式》之模板方法模式

    http://www.cnblogs.com/java-my-life/archive/2012/05/14/2495235.html 英文定义更容易理解: defines the skeleton ...

  7. 《JAVA与模式》之桥梁模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述桥梁(Bridge)模式的: 桥梁模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式. ...

  8. Java两种设计模式_23种设计模式(11)java策略模式

    23种设计模式第四篇:java策略模式 定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换. 类型:行为类模式 类图: 策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这 ...

  9. java 设置模式_Java设计模式百例 - 调停者模式

    调停者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性的.这种模式提供了一个调停者类,用来充当"中心化"或"总线化"的角色,与各个 ...

  10. Java基础学习笔记(二)_Java核心技术(进阶)

    本篇文章的学习资源来自Java学习视频教程:Java核心技术(进阶)_华东师范大学_中国大学MOOC(慕课) 本篇文章的学习笔记即是对Java核心技术课程的总结,也是对自己学习的总结 文章目录 Jav ...

最新文章

  1. 从传统运维到云运维演进历程之软件定义存储(五)上
  2. ubuntu常用配置整理
  3. 从变量到封装:一文带你为机器学习打下坚实的Python基础 By 机器之心2017年10月13日 10:43 本文整体梳理了 Python 的基本语法与使用方法,并重点介绍了对机器学习十分重要的且常
  4. 数据结构 稀疏矩阵的实现方法
  5. Java基础之equals方法和= =的区别
  6. Jenkins系列之-—07 集成JIRA
  7. 为什么我们需要再给 Firefox 一次机会?
  8. Make Fcitx Work In Sublime-Text-3
  9. Mockplus黑色星期五和网络星期一特惠
  10. 网上预约订餐系统(联网可用)
  11. Kafka 各版本下载指南
  12. 一元初始,森罗万象:5G角逐已被荣耀拉开序幕
  13. bzoj 4034: [HAOI2015]T2
  14. 连不上WiFi了怎么办之网络异常时的网络重置
  15. vue生成条形码和二维码并打印
  16. ibm服务器卡在开机界面_使用HTTPS配置IBM Integration Bus Web用户界面
  17. 北斗系统学习—JT808协议用C语言解析
  18. Git Please tell me who you are
  19. 新装固态硬盘SSD,在安装WIN10,显示一直请稍后及Windows安装程序无法将Windows配置为此计算机的解决方法(网上都是胡诌)
  20. DapperPoco -- 基于Dapper的、轻量级的、高性能的、简单的、灵活的ORM框架

热门文章

  1. FragmentTabHost+FrameLayout实现底部菜单栏
  2. BlogEngine.Net架构与源代码分析系列part2:业务对象——共同的父类BusinessBase
  3. SQL Server置疑数据库解决方法
  4. 接口返回buffer的16进制数据如何转换
  5. JavaScript常见设计模式梳理
  6. intellij idea 程序包不可见问题
  7. 在本地电脑搭建一个网站 转自本文地址:http://www.fengzimo.com/1503.html 来源 疯子墨...
  8. python,错误、调试和测试
  9. 【bzoj1050】[HAOI2006]旅行comf 并查集
  10. C#: switch语句的重构『网摘』