单一职责原则SRP:SingleResponsibility Principle,就一个类而言,应该仅有一个引起它变化的原因。
如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的功能。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。正如一个人可能担负着很多重要的职责,那么对他而言合理分配时间去做各项任务就变得尤为重要。若有两种以上的事情在某一时间内由一个人去解决,那么他做任何一件事都会影响做另一件事的效果。所以必须GTD。
软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。其实要去判断是否应该分离出类来,就是如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责。当然GTD并不是要分离出多个自我来,而是分配多个时间段,在每个时间段内只有一个我。这样就实现了一个类一个职责的效果。
在编程时,我们要在累的职责分离上多思考,做到单一原则,这样代码才真正易维护、易扩展、易复用、灵活多样。
开放-封闭原则OCP:theOpen-Closed Principle
在软件设计模式中,不能修改但可以扩展的思想是最重要的一种设计原则,即开放-封闭原则:软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。为了面对需求的改变仍可以保持相对稳定,从而使得系统在第一个版本以后不断推出新的版本,就要对扩展开放而对更改封闭。在计算器的例子中,我们通过增加一个抽象的运算类,通过一些面向对象的手段如继承、多态等来隔离具体算法与client的耦合,如果要增加其他运算比如开根,不需要更改已有具体算法类和client,而是增加子类即可。所以,面对程序的改动是通过增加新代码进行的,而不是更改现有的代码,这就是开放-封闭原则的精神所在。所以,无论模块是多么的封闭,都会存在一些无法对之封闭的变化。既然不能完全封闭,设计人员必须对模块应该对哪种变化封闭做出选择,猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化。但是应该仅对程序中频繁变化的那些部分做出抽象,也不能对每个部分都刻意进行抽象。
原文链接:https://www.f2er.com/javaschema/286393.html