Java对象协作通过方法调用、参数传递、返回值、接口约定和引用共享实现,核心是职责分离下安全清晰地交换数据与控制权。

Java中对象协作主要通过方法调用、参数传递、返回值、接口约定和引用共享来实现,核心是让不同对象在职责分离的前提下安全、清晰地交换数据与控制权。
通过方法调用触发协作
一个对象调用另一个对象的公开方法,是最直接的协作方式。被调用方执行逻辑后可修改自身状态,也可返回结果供调用方使用。
- 调用前需持有目标对象的引用(如通过构造器注入、setter注入或局部创建)
- 方法应遵循单一职责,明确表达“做什么”,而非“怎么做”
- 避免在方法内直接new依赖对象,优先通过外部传入,利于测试和替换
借助接口定义协作契约
接口不关心具体实现,只约定行为规范。多个类实现同一接口后,调用方只需面向接口编程,无需知道实际类型。
- 例如定义red">PaymentProcessor接口,CreditCardProcessor和WeChatPayProcessor分别实现,业务类只需持有接口引用即可切换支付方式
- 接口方法名应体现业务语义(如processPayment()而非doSomething())
- 接口不应暴露内部细节,比如不提供getInternalState()这类破坏封装的方法
利用参数与返回值传递信息
方法签名中的参数是输入协作的“入口”,返回值是输出协作的“出口”。合理设计能降低耦合、提升可读性。
立即学习“Java免费学习笔记(深入)”;
- 优先传入不可变对象或值对象(如String、LocalDateTime),避免被意外修改
- 避免方法接收过多参数(建议不超过4个),可封装为DTO或Builder对象
- 返回null易引发空指针,推荐返回Optional、空集合或专用结果类(如Result
)
通过引用共享有限状态
多个对象持有一个共同对象的引用时,可通过该对象间接通信。适用于需要共享配置、上下文或缓存等场景。
- 共享对象应尽量设计为不可变,或提供线程安全的访问方式(如使用ConcurrentHashMap)
- 避免随意暴露可变内部状态的getter,可用防御性拷贝(如返回Collections.unmodifiableList())
- 注意循环引用风险——A持有B,B又持有A,可能导致内存泄漏或序列化异常










