Chapter2——GRASP
GRASP描述设计类的原则和如何分配类的功能。
1.Information Expert:
在设计类时,如果某个类能在某方面具有完整的信息,足以实现某个责任,就将这个责任分配给这个类。
2.Creator:
以下情况类A应该有创建类B的责任:
<1>A是B的聚合(A聚合了B,类A中有B实例属性)
<2>A是B的容器
<3>A有初始化B的数据
<4>A记录B的实例
<5>A频繁使用B
3.High Cohesion:
分解类,使得分解出来的类具有独立的责任,从而提高设计类的重用性,并且控制类设计的复杂程度。类的数量增多,类间合作完成任务,增加了耦合。
4.Low Coupling:
作用:
<1>使得一个类的修改对其它类的影响范围有所降低
<2>系统更容易维护
<3>类会变得简单、专业、高内聚,更容易理解
A、B产生耦合的条件:
<1>A具有一个B的属性
<2>A调用B对象的方法
<3>A的方法包括对B的引用,返回的是B类型或参数是B类型
<4>A是B的子类,或者A是B的实现类
拇指规则2条:
<1>如果A已经与B有连接,如分配责任A给B不合适,那么分配责任B给A
<2>两个模块中的内部类间连接是一个大错误
Don't Talk to Strangers Principal:
不要连接不需要通信的两个对象,不要作无为的耦合。
5.Controller:
人们通常将接收和处理系统事件的职责分配给以下类:
<1>能全面代表系统设备或子系统的类
<2>可以代表系统事件发生时用例发生情景的类
<3>代表某些卷入真实世界应用中的活动的类。
上面即为控制器类,不要将这些责任分配给用户界面类(如Window、Dialog、Page等)。
6.Polymorphism:
GRASP共识:
<1>系统事件的接收与处理通常由一个高级类来代替
<2>一个子系统会有很多控制器类,分别处理不同的事务
MVC(Model-View-Controller)三层架构
7.Pure Fabrication:
略。
8.Indirection:
要避免对象间直接耦合,可以将协调组件或服务的职责分配给中间对象(间接或中介对象)。引入中间对象可以使得两个子系统的重用性得到提高。当两个子系统不能独立应用时,我们可以使用抽象概念来耦合,就是采用抽象类连接相关的抽象类,那么它们的子类都可以独立应用而不用考虑这种连接。
9.Protected Variations:
找出预计有变化或不稳定的点,为这些变化的点创建稳定的接口。
GRASP描述设计类的原则和如何分配类的功能。
1.Information Expert:
在设计类时,如果某个类能在某方面具有完整的信息,足以实现某个责任,就将这个责任分配给这个类。
2.Creator:
以下情况类A应该有创建类B的责任:
<1>A是B的聚合(A聚合了B,类A中有B实例属性)
<2>A是B的容器
<3>A有初始化B的数据
<4>A记录B的实例
<5>A频繁使用B
3.High Cohesion:
分解类,使得分解出来的类具有独立的责任,从而提高设计类的重用性,并且控制类设计的复杂程度。类的数量增多,类间合作完成任务,增加了耦合。
4.Low Coupling:
作用:
<1>使得一个类的修改对其它类的影响范围有所降低
<2>系统更容易维护
<3>类会变得简单、专业、高内聚,更容易理解
A、B产生耦合的条件:
<1>A具有一个B的属性
<2>A调用B对象的方法
<3>A的方法包括对B的引用,返回的是B类型或参数是B类型
<4>A是B的子类,或者A是B的实现类
拇指规则2条:
<1>如果A已经与B有连接,如分配责任A给B不合适,那么分配责任B给A
<2>两个模块中的内部类间连接是一个大错误
Don't Talk to Strangers Principal:
不要连接不需要通信的两个对象,不要作无为的耦合。
5.Controller:
人们通常将接收和处理系统事件的职责分配给以下类:
<1>能全面代表系统设备或子系统的类
<2>可以代表系统事件发生时用例发生情景的类
<3>代表某些卷入真实世界应用中的活动的类。
上面即为控制器类,不要将这些责任分配给用户界面类(如Window、Dialog、Page等)。
6.Polymorphism:
GRASP共识:
<1>系统事件的接收与处理通常由一个高级类来代替
<2>一个子系统会有很多控制器类,分别处理不同的事务
MVC(Model-View-Controller)三层架构
7.Pure Fabrication:
略。
8.Indirection:
要避免对象间直接耦合,可以将协调组件或服务的职责分配给中间对象(间接或中介对象)。引入中间对象可以使得两个子系统的重用性得到提高。当两个子系统不能独立应用时,我们可以使用抽象概念来耦合,就是采用抽象类连接相关的抽象类,那么它们的子类都可以独立应用而不用考虑这种连接。
9.Protected Variations:
找出预计有变化或不稳定的点,为这些变化的点创建稳定的接口。
开闭原则(the Open Closed Principal,OCP)对扩展开放,对修改关闭。即在设计一个模块的时候,应当使这个模 块在不被修改的前提下可以被扩展。
待续......