预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第页共NUMPAGES9页第PAGE\*MERGEFORMAT9页共NUMPAGES\*MERGEFORMAT9页GRASP(GeneralResponsibilityAssignmentSoftwarePatterns)创建者(Creator)问题:谁创建了A?解决方案:如果以下条件之一为真时(越多越好),将创建类A实例的职责分配给B:B“包含”或组成聚合了AB记录AB紧密地使用AB具有A的初始化数据举例:比如在富客户端应用开发中,主程序创建一个主窗口对象,然后有主窗口对象来负责创建它内部的各种菜单、按钮等对象(而不是由主程序来创建这些菜单或按钮对象之后,再把它设置到主窗口中去)信息专家(InformationExpert)问题:给对象分配职责的基本原则是什么?解决方案:把职责分配给具有完成该职责所需信息的那个类。(描述一种直觉!)举例:publicclassClasses{privateintid;privateSetstudents;//描述一种直觉publicvoidaddStudent(Studentstudent){if(students==null){students=newHashSet();}students.add(student);}//将职责放在拥有这个职责所需信息的那个类中publicbooleanhasStudent(Studentstudent){for(Iteratoriterator=students.iterator();iterator.hasNext();){Students=(Student)iterator.next();if(s.equals(student)){returntrue;}}returnfalse;}publicclassStudent{privateintid;privateStringname;//判断两个学生对象是否相同的职责,交给Student来完成,因为它拥有这个//职责所需要的所有信息publicbooleanequals(Studentstudent){if(name.equals(student.getName())){returntrue;}returnfalse;}publicclassTreeNode{privateintid;privateintlevel;privateStringnodeName;privateTreeNodeparent;privateList<TreeNode>children;publicvoidprint(){for(inti=0;i<level;i++){System.out.print("--");}System.out.println(nodeName);for(Iterator<TreeNode>iterator=children.iterator();iterator.hasNext();){TreeNodenode=iterator.next();node.print();}}低耦合(LowCoupling)所谓耦合,即两个对象之间联系的紧密程度问题:如何减少因变化产生的影响?解决方案:分配职责以使耦合保持在较低的水平。低耦合是构建软件最重要的目标之一。要注意:我们讲低耦合,是降低与不稳定系统之间的耦合度,而不是那些稳定的系统,比如说我们在JAVA编程过程中,没有必要想专门的办法来降低与JDK核心类库之间的耦合度,因为JDK核心类库非常稳定,很少会发生变化。高内聚(HighCohesion)所谓内聚,即对象职责的相关性(或对象的操作之间联系的紧密程度)。高内聚,即保持对象职责的高度相关性。不良内聚和不良耦合往往都是齐头并进的!问题:怎样保持对象是有重点的、可理解的、可管理的,并且能够支持低耦合?解决方案:分配职责以保持较高的内聚性。内聚性较低的类,要做许多不相关的工作,或需要完成大量的工作。这样的类是不合理的。这样的类会有下列问题:难以理解难以复用难以维护脆弱,