之前看到有个朋友在其他贴里留了 Java面向对象设计原则 的一些书面解释,在阅读和学习之后我有些疑惑,并把我自己的理解写在了每个原则之后,有些不明白、或者理解错的地方希望哪个朋友帮忙给修正下,谢谢~(1)SRP 单一职责原则  
就一个类而言,应该仅有一个引起它变化的原因。  
职责即为"变化的原因".    ——————个人觉得像“单例”的意思。(2)OCP 开放封闭原则  
软件实体(类、模块、函数等)应该是可以扩展的,但是不可修改。  
对于扩展是开放的,对于更改是封闭的.  
关键是抽象.将一个功能的通用部分和实现细节部分清晰的分离开来.  
开发人员应该仅仅对程序中呈现出频繁变化的那些部分作出抽象.拒绝不成熟的抽象和抽象本身一样重要.   ——————不太明白(3)LSP Liskov替换原则  
子类型必须能替换掉他们的基本类型   ——————个人觉得像重写父类(4)DIP 依赖倒置原则  
抽象不应该依赖于细节。细节应该依赖于抽象。  
Hollywood原则: "Don't call us, we'll call you".程序中所有的依赖关系都应该终止于抽象类和接口。针对接口而非实现编程。  
任何变量都不应该持有一个指向具体类的指针或引用。  
任何类都不应该从具体类派生。  
任何方法都不应该覆写他的任何基类中的已经实现了的方法。   ——————个人觉得是用接口实现类与类之间的关系(5)ISP 接口隔离原则  
不应该强迫客户依赖于他们不用的方法。接口属于客户,不属于他所在的类层次结构。  
多个面向特定用户的接口胜于一个通用接口。  ——————个人觉得是多接口实现方法调用(6)REP 重用发布等价原则  
重用的粒度就是发布的粒度.   ——————个人觉得是代码重用(7)CCP 共同重用原则  
一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。  
相互之间没有紧密联系的类不应该在同一个包中。  ——————个人觉得是将一些能被多个类相互调用的方法的类集中在一个包
                                                          内,无关系的类应分包放(8)CRP 共同封闭原则  
包中的所有类对于同一类性质的变化应该是共同封闭的。
一个变化若对一个包影响,则将对包中的所有类产生影响,而对其他的包不造成任何影响.   ——————不太明白(9)ADP 无依赖原则  
在包的依赖关系中不允许存在环.  
细节不应该被依赖.  ——————不太明白(10)SDP 稳定依赖原则  
朝着稳定的方向进行依赖.  
应该把封装系统高层设计的软件(比如抽象类)放进稳定的包中,
不稳定的包中应该只包含那些很可能会改变的软件(比如具体类)。  ——————个人觉得是接口、抽象类要与具体实现类分包存
                                                                          放(11)SAP 稳定抽象原则  
包的抽象程度应该和其他稳定程度一致.  
一个稳定的包应该也是抽象的,一个不稳定的包应该是抽象的.  ——————不太明白(12)DAP(Default Abstraction Principle)缺省抽象原则  
在接口和实现接口的类之间引入一个抽象类,这个类实现了接口的大部分操作.    ——————个人觉得是抽象类实现接口,实现类
                                                                                     继承抽象类
                                                                                     这样的好处在哪?(13)IDP(Interface Design Principle)接口设计原则  
规划一个接口而不是实现一个接口。  ——————个人觉得是定义接口时要考虑实现类的具体方法来定义接口,不要有多余的不使
                                              用的方法在实现类中实现(14)BBP(Black Box Principle)黑盒原则  
多用类的聚合,少用类的继承。  ——————个人觉得是一个类中可以有多个其他类的实例,通过实例来调用其他类的方法,而不
                                          是通过继承来调用(15)DCSP(Don't Concrete Supperclass Principle)不要构造具体的超类原则  
避免维护具体的超类。  ——————个人觉得是尽量少的用继承的方式,可以避免对父类代码的维护

解决方案 »

  1.   

    (1)SRP 单一职责原则  是指一个类专门做一类事情,一个方法只做一件事情,当然这是一种目标,很多时候是不能够很好实现的。例如有这样一个方法。
    public String getName(){
           System.out.println(this.name);
           return this.name;
    }
    在这个方法的主要任务是获得名字属性,但是里面却多出了打印名字的操作,这样这个方法实际上就做了两件事,违背了单一原则。(2)OCP 开放封闭原则
    这种说法其实和职责单一性有很密切的联系的,设计一个模块或者类,他是需要内部封闭的,对其内部的运行逻辑不允许更改,但是对外扩展要尽量的开发。就像现在很多通用框架,你可以往上面任意扩展某功能和实现,但是不能够随意的更改框架本身的处理流程和运算逻辑。(4)DIP 依赖倒置原则  这个原则被spring很好的实现了,就是依赖注入,是一种多态的灵活运用,所有的程序应该依赖接口而不是依赖某个具体的实现类。(7)CCP 共同重用原则 这个原则其实就是基于单一职责的原则的,一个包里面的类应该是去做某一类事情,其它事情不去处理,这是这个原则是从方法提高到包而已。