单一职责原则理解
1:该原则提出了对对象职责的一种理想期望.对象不应该承担太多职责,正如人不应
该一心分为二用.唯有专注,才能保证对象的高内聚;唯有单一,才能保证对象的细
粒度.对象的高内聚与细粒度有利于对象的重用;
2:一个类(或者大到模块,小到方法)承担的职责越多,它被复用的可能性越小.而且如
果一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化
时,可能会影响其他职责的运作.
3:类的职责主要包括两个方面:数据职责和行为职责,数据职责通过其属性来体现,而
行为职责通过其方法来体现;
4:单一职责原则是实现高内聚,低耦合的指导方针,在很多代码重构手法中都能找到
它的存在,它是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将
其分离,而发现类的多重职责需要设计人员具有较强的分析设计能力和相关重构
经验;
里氏替换原则理解
1:里氏替换原则可以通俗表述为:在软件中如果能够使用基类对象,那么一定能够使
用其子类对象.把基类都替换成它的子类,程序将不会产生任何错误和异常,反过
来则不成立,如果一个软件实体使用的是一个子类的话,那么它不一定能够使用
基类.
2:里氏替换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以
使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时
再确认其子类类型,用子类对象来替换父类对象.
3:Java语言中,在编译阶段,Java编译器会检查一个程序是否符合里氏替换原则,这
是一个与现实无关的,纯语法意义上的检查,但Java编译器的检查是有局限的.
开闭原则
开闭原则定义:
1:开闭原则(Open-Closed Principle,OCP)定义如下:
一个软件实体应当对扩展开放,对修改关闭.也就是说在设计一个模块的时候,
应当使这个模块可以在不被修改的前提下被扩展,即实现在不修改源代码的情
况下改变这个模块的行为.
2:理解:抽象化是开闭原则的关键
(1):绝大部分的设计模式都符合开闭原则,在对每一个模式进行优缺点评价
时都会以开闭原则作为一个重要的评价依据,以判断基于该模式设计的
系统是否具备良好的灵活性和可扩展性.
(2):遵循开闭原则的系统设计,可以让软件系统可复用,并且易于维护.
依赖倒转原则
依赖倒转原则定义
1:依赖倒转原则(Dependence Inversion Principle,DIP)的定义如下:
高层模块不应该依赖低层模块,它们都应该依赖抽象.抽象不应该于细节,细节应
该依赖于抽象.
2:另一种表述为:
要针对接口编程,不要针对实现编程.
依赖倒转原则理解
1:简单来说,依赖倒转原则就是指:代码要依赖于抽象的类,而不要依赖于具体的类;
要针对接口或者抽象类编程,而不是针对具体类编程.
2:实现开闭原则的关键是抽象化,并且从抽象化导出具体化实现,如果说开闭原则是
面向设计的目标的话,那么依赖倒转原则就是面向对象设计的主要手段.
3:依赖倒转原则的常用实现方式之一是在代码中使用抽象类,而将具体类放在配置
文件中.
依赖倒转原则分析
1:类之间的耦合
(1):零耦合关系:两个类没有依赖关系;
(2):具体耦合关系:两个具体的类之间有依赖关系,如果一个具体类直接引用另外
一个具体类,就是这种关系;
(3):抽象耦合关系:这种关系发生在一个具体类和一个抽象类之间,这样就使必须
发生关系的类之间保持最大的灵活性;
2:依赖倒转原则要求客户端依赖于抽象耦合,以抽象方式耦合是依赖倒转原则的关
键;
依赖注入
1:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例
(1):构造注入:通过构造函数注入实例变量;
(2):设值注入:通过Setter方法注入实例变量;
(3)接口注入:通过接口方法注入实例变量;