分配职责给对象的基本原则是什么?
解决方案:找到实现职责需要有的信息,将职责分配给有此信息的对象。
信息专家(Information expert)是决定如何分配职责(给方法、字段等)的原则。
应用信息专家的原则,常见指定职责的作法是针对特定的职责,确认要实现此职责要有什么信息,以及信息存在的对象。
这会将职责分配到有最多和职责有关信息的对象。
参见:工厂方法
对象的创建是面向对象系统中常见的活动之一。因此需要确认哪一个类别有职责创建对象。
问题:哪个类别要创建对象A?
解决方案:一般而言,类别B若符合以下一个(也有可能是多个)条件,有权责要创建对象A:
B的实例包括A的实例,或是合成聚合A的实例
B的实例会纪录A的实例
B的实例密切的使用A的实例
B的实例有A的实例初始化时的信息,在创建对象时会传递给A的实例[3]:16:16.7
相关模式或原则:低耦合性、工厂方法
控制器(controller)模式会将处理系统对象的职责指定给表现整个系统或是用例场景的非用户界面类别。控制器对象是非用户界面,负责接收或处理系统事件的对象。
问题:哪个对象要处理输入系统事件?
解决方案:应该由用例控制器来处理用例所有的系统事件,也可以用在一个以上的用例。例如“创建用户”或“删除用户”的用例,可以用同一个类别,称为UserController,而不是用二个个别的用例控制器。
控制器定义为在用户界面之后,接收及处理系统动作的第一个对象。控制器需将需其他对象来完成的工作给对应对象。控制器协调或是控制相关活动。在信息系统逻辑架构的面向对象系统中,若应用程序在应用层/服务层和业务逻辑之间有明确的分隔,GRASP控制器可以视为是应用层或是服务层的一部分。
相关模式或原则:命令模式、外观模式、层、纯虚构。
中介(indirection)模式支持低耦合性,在二个对象之间将其职责指定到中介的对象,因此可以复用。其中一个例子是在模型—视图控制模式中,在资料(模型)和其实现(视图)之间导入控制器组件。这可以确保二个组件之间的低耦合性。
问题: 在二个或多个对象之间,要如何分配职责才能避免耦合?如何将对象解耦,才能支持低耦合度,且维持较高的复用潜力?
解决方案:将职责分配给二个或多个组件之间的中介对象或服务,让组件之间不会直接耦合
主条目:松耦合
耦合性是评估一组件链接另一组件,知道另一组件,或是依赖另一组件的程度。松耦合是为了以下的优点,指派职责的评估模式:
类别之间的相依性低
一个类别的修改对另一个类别的影响较小
复用潜力较高
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
Java核心架构进阶知识点
面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的
内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
多的介绍了,大家可根据以上截图自行脑补
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!