《设计模式解析(第2版•修订版)》—第1章 1.7节面向对象程序设计实践

简介: 对象对自己行为所负的责任越多,控制程序需要负的责任就越少。封装使对象内部行为的变化对其他对象变得透明了。封装有助于防止不良副作用。

本节书摘来自异步社区《设计模式解析(第2版•修订版)》一书中的第1章,第1.7节面向对象程序设计实践,作者【美】Alan Shalloway(艾伦•沙洛维) , James R.Trott(詹姆斯•R.特罗特),更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.7 面向对象程序设计实践
设计模式解析(第2版•修订版)
我们再次考察一下本章开始讨论的形状实例。怎样用面向对象的方式实现它呢?请记住,我们必须完成以下任务。

1.在数据库中找到形状列表。

2.打开形状列表。

3.按某种规则将列表排序。

4.在显示器上显示各个形状。

为了用面向对象方式解决这个问题,我需要定义一些对象和这些对象具有的责任。

在Shape程序中使用对象

所需要的对象如下表所示。


b08183e963e48138768f28bf299484291f15fcec

运行程序

现在主程序的步骤应该与下面给出的类似。

1.主程序创建一个数据库(ShapeDataBase)对象的实例。

2.主程序要求数据库对象找到我感兴趣的一组形状,然后实例化一个保存这些形状的Collection对象(实际上,它还将实例化Collection对象中存放的Circle对象和Square对象)。

3.主程序要求Collection对象将所存放的形状排序。

4.主程序要求Collection对象显示形状。

5.Collection对象要求所存放的所有形状显示自己。

6.每个形状根据形状种类显示自己(使用Display对象)。

为什么这有助于应对新需求

我们来看这个方案怎么会有助于我们应对新的需求(请记住,需求总在变化)。例如,考虑如下的新需求。

增加新种类的形状(例如三角形)。为了引入一种新的形状,只需两步:

创建Shape类的一个新的派生类,来定义这个新形状;
在新的派生类中,实现与该形状对应的display方法。
修改排序算法。为了修改形状排序方法,只需一步:

修改Collection的sort方法。这样所有形状都将使用新算法。
结论:面向对象方法有效地限制了需求变更所带来的影响。

再谈封装

封装有几个优点。“对用户隐藏”这一事实直接蕴涵了以下优点。

使用更容易,因为用户不需要再操心实现问题了。
可以在不考虑调用者的情况下修改实现。(因为调用者从一开始就不知道对象是如何实现的,它们之间不应该存在任何依赖关系。请记住,在维护中时间往往花在了解和留心这些依赖关系上,而不是实际添加新功能。)
其他对象对该对象内部是未知的——这些外部对象往往用来帮助实现该对象接口所指定的功能。
优点:减少副作用

最后,考虑功能改变时引起的不良副作用问题。这种bug通过封装有效地解决了。对象内部对于其他对象是未知的。如果使用封装,并遵循“对象自己负责自己”的策略,那么唯一能影响对象的办法就是调用该对象的方法。对象的数据和实现其责任的方式都与其他对象所带来的变化屏蔽开来。

封装拯救了我们

对象对自己行为所负的责任越多,控制程序需要负的责任就越少。
封装使对象内部行为的变化对其他对象变得透明了1。
封装有助于防止不良副作用。
值得注意的是封装与耦合的关系。封装什么东西时,必然将使其耦合变松。隐藏实现(即封装它们)有助于松耦合。
1即不可见了。——译者注
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章
|
11月前
|
人工智能 API 语音技术
HarmonyOS Next~鸿蒙AI功能开发:Core Speech Kit与Core Vision Kit的技术解析与实践
本文深入解析鸿蒙操作系统(HarmonyOS)中的Core Speech Kit与Core Vision Kit,探讨其在AI功能开发中的核心能力与实践方法。Core Speech Kit聚焦语音交互,提供语音识别、合成等功能,支持多场景应用;Core Vision Kit专注视觉处理,涵盖人脸检测、OCR等技术。文章还分析了两者的协同应用及生态发展趋势,展望未来AI技术与鸿蒙系统结合带来的智能交互新阶段。
801 31
|
11月前
|
设计模式 SQL Java
【再谈设计模式】解释器模式~语法的解析执行者
解释器模式定义了一种语言的语法表示,并定义一个解释器来解释该语言中的句子。它使用类来表示每个语法规则,并且通过递归调用这些类的方法来解释表达式。本质上,它将一个复杂的表达式分解为一系列简单的部分,然后按照特定的语法规则进行解析和执行。
303 8
|
11月前
|
缓存 边缘计算 安全
阿里云CDN:全球加速网络的实践创新与价值解析
在数字化浪潮下,用户体验成为企业竞争力的核心。阿里云CDN凭借技术创新与全球化布局,提供高效稳定的加速解决方案。其三层优化体系(智能调度、缓存策略、安全防护)确保低延迟和高命中率,覆盖2800+全球节点,支持电商、教育、游戏等行业,帮助企业节省带宽成本,提升加载速度和安全性。未来,阿里云CDN将继续引领内容分发的行业标准。
621 7
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
DeepSeek 实践应用解析:合力亿捷智能客服迈向 “真智能” 时代
DeepSeek作为人工智能领域的创新翘楚,凭借领先的技术实力,在智能客服领域掀起变革。通过全渠道智能辅助、精准对话管理、多语言交互、智能工单处理、个性化推荐、情绪分析及反馈监控等功能,大幅提升客户服务效率和质量,助力企业实现卓越升级,推动智能化服务发展。
449 1
|
11月前
|
机器学习/深度学习 人工智能 监控
鸿蒙赋能智慧物流:AI类目标签技术深度解析与实践
在数字化浪潮下,物流行业面临变革,传统模式的局限性凸显。AI技术为物流转型升级注入动力。本文聚焦HarmonyOS NEXT API 12及以上版本,探讨如何利用AI类目标签技术提升智慧物流效率、准确性和成本控制。通过高效数据处理、实时监控和动态调整,AI技术显著优于传统方式。鸿蒙系统的分布式软总线技术和隐私保护机制为智慧物流提供了坚实基础。从仓储管理到运输监控再到配送优化,AI类目标签技术助力物流全流程智能化,提高客户满意度并降低成本。开发者可借助深度学习框架和鸿蒙系统特性,开发创新应用,推动物流行业智能化升级。
379 1
|
Serverless 对象存储 人工智能
智能文件解析:体验阿里云多模态信息提取解决方案
在当今数据驱动的时代,信息的获取和处理效率直接影响着企业决策的速度和质量。然而,面对日益多样化的文件格式(文本、图像、音频、视频),传统的处理方法显然已经无法满足需求。
486 4
智能文件解析:体验阿里云多模态信息提取解决方案
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是"将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为5种:单例模式、工厂方法模式抽象工厂式、原型模式、建造者模式。
1066 2
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
设计模式 Java 程序员
【23种设计模式·全精解析 | 概述篇】设计模式概述、UML图、软件设计原则
本系列文章聚焦于面向对象软件设计中的设计模式,旨在帮助开发人员掌握23种经典设计模式及其应用。内容分为三大部分:第一部分介绍设计模式的概念、UML图和软件设计原则;第二部分详细讲解创建型、结构型和行为型模式,并配以代码示例;第三部分通过自定义Spring的IOC功能综合案例,展示如何将常用设计模式应用于实际项目中。通过学习这些内容,读者可以提升编程能力,提高代码的可维护性和复用性。
3205 1
【23种设计模式·全精解析 | 概述篇】设计模式概述、UML图、软件设计原则
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
1208 1
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析

热门文章

最新文章

推荐镜像

更多
  • DNS