重读《JAVA与模式》之二
3.1软件系统的可维护性
一个软件系统设计的可维护性较低,即随着性能要求的变化而"腐烂“的真正原因有四个:过于僵硬、过于脆弱、复用率低、黏度过高。
过于僵硬:牵一发而动全身,无法轻易插入新的功能模块。
过于脆弱:蝴蝶效应,修改一处代码,引起其他地方不可预测的故障
复用率低:轮子和各处牵扯太多,无法复用,导致到处都有新造的轮子
黏度过高:不能保存原始设计意图和原始设计框架,让程序员更倾向于用特例的方式硬插入新代码满足眼前的需求。说明系统的黏度过高。
好的系统设计应有如下性质:可扩展性、灵活性、可插入性
可扩展性:可方便增加新的性能
灵活性:允许代码修改平稳的发生,不会波及其他模块
可插入性:接口化,实现类可方便替换,如零件的标准化
3.2系统的可复用性
复用亦即重用,可提高生产效率、提高软件质量、改善系统的可维护性
传统的复用:代码的拷贝粘贴、算法的复用、数据结构的复用
有的复用可提高可维护性,有的复用破坏了可维护性,因此支持可维护性的复用才是设计的准则
面向对象的复用:从算法和数据结构的层面上升到宏观的商业逻辑的抽象层次上
对可维护性的支持
适当提高可复用性,可提高系统的可扩展性。有赖于:”开-闭“原则,里氏代换原则、依赖倒转原则、组合/聚合复用原则。
适当提高可复用性,可提高系统的灵活性。有赖于”开-闭“原则、迪米特法则、接口隔离原则。
适当提高可复用性,可提高系统的可插入性。有赖于:”开-闭“原则,里氏代换原则、依赖倒转原则、组合/聚合复用原则。
设计原则:
- ”开-闭“原则 OCP
- 里氏代换原则 LSP
- 依赖倒转原则 DIP
- 接口隔离原则 ISP
- 组合/聚合复用原则 CARP
- 迪米特法则 LoD
3.3老子论不武
善为士者不武。好的系统设计师设计好的系统,维护时不需要让人大动干戈
天下有道,走马以粪,天下无道,戎马生于效。好的设计,维护成本低;差的设计,维护人员疲于奔命
转载于:https://my.oschina.net/wbilly/blog/738594
重读《JAVA与模式》之二相关推荐
- Java设计模式(十二) 策略模式
策略模式介绍 策略模式定义 策略模式(Strategy Pattern),将各种算法封装到具体的类中,作为一个抽象策略类的子类,使得它们可以互换.客户端可以自行决定使用哪种算法. 策略模式类图 策略模 ...
- Java 设计模式之工厂模式(二)
原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...
- java基础语法(二)--单列模式
java基础语法(二)--单列模式 /*** 功能:单列模式* @author Administrator**/ public class SingletonTest {public static v ...
- 《JAVA与模式》之装饰模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述装饰(Decorator)模式的: 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替 ...
- 《JAVA与模式》之策略模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述策略(Strategy)模式的: 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它 ...
- 《JAVA与模式》之模板方法模式
http://www.cnblogs.com/java-my-life/archive/2012/05/14/2495235.html 英文定义更容易理解: defines the skeleton ...
- 《JAVA与模式》之桥梁模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述桥梁(Bridge)模式的: 桥梁模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式. ...
- Java两种设计模式_23种设计模式(11)java策略模式
23种设计模式第四篇:java策略模式 定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换. 类型:行为类模式 类图: 策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这 ...
- java 设置模式_Java设计模式百例 - 调停者模式
调停者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性的.这种模式提供了一个调停者类,用来充当"中心化"或"总线化"的角色,与各个 ...
- Java基础学习笔记(二)_Java核心技术(进阶)
本篇文章的学习资源来自Java学习视频教程:Java核心技术(进阶)_华东师范大学_中国大学MOOC(慕课) 本篇文章的学习笔记即是对Java核心技术课程的总结,也是对自己学习的总结 文章目录 Jav ...
最新文章
- 从传统运维到云运维演进历程之软件定义存储(五)上
- ubuntu常用配置整理
- 从变量到封装:一文带你为机器学习打下坚实的Python基础 By 机器之心2017年10月13日 10:43 本文整体梳理了 Python 的基本语法与使用方法,并重点介绍了对机器学习十分重要的且常
- 数据结构 稀疏矩阵的实现方法
- Java基础之equals方法和= =的区别
- Jenkins系列之-—07 集成JIRA
- 为什么我们需要再给 Firefox 一次机会?
- Make Fcitx Work In Sublime-Text-3
- Mockplus黑色星期五和网络星期一特惠
- 网上预约订餐系统(联网可用)
- Kafka 各版本下载指南
- 一元初始,森罗万象:5G角逐已被荣耀拉开序幕
- bzoj 4034: [HAOI2015]T2
- 连不上WiFi了怎么办之网络异常时的网络重置
- vue生成条形码和二维码并打印
- ibm服务器卡在开机界面_使用HTTPS配置IBM Integration Bus Web用户界面
- 北斗系统学习—JT808协议用C语言解析
- Git Please tell me who you are
- 新装固态硬盘SSD,在安装WIN10,显示一直请稍后及Windows安装程序无法将Windows配置为此计算机的解决方法(网上都是胡诌)
- DapperPoco -- 基于Dapper的、轻量级的、高性能的、简单的、灵活的ORM框架
热门文章
- FragmentTabHost+FrameLayout实现底部菜单栏
- BlogEngine.Net架构与源代码分析系列part2:业务对象——共同的父类BusinessBase
- SQL Server置疑数据库解决方法
- 接口返回buffer的16进制数据如何转换
- JavaScript常见设计模式梳理
- intellij idea 程序包不可见问题
- 在本地电脑搭建一个网站 转自本文地址:http://www.fengzimo.com/1503.html 来源 疯子墨...
- python,错误、调试和测试
- 【bzoj1050】[HAOI2006]旅行comf 并查集
- C#: switch语句的重构『网摘』