软件设计师 · 高频练习

享元模式为什么适合共享大量细粒度对象?

中级 单选题 第 682 题 中等 软件设计师享元模式设计模式结构型模式
题目

某在线文档系统需要显示大量字符对象。很多字符的字体、编码、基本形态可以共享,而位置、颜色、上下文状态由外部传入。为了减少大量相似对象带来的内存开销,较适合采用的设计模式是()。

A 享元模式
B 责任链模式
C 观察者模式
D 命令模式
题目类型:原创高频练习题 用途:用于帮助理解软件设计师相关考点和答案解析,不等同于官方真题。
正确答案
A
答案解析

享元模式用于共享大量细粒度对象中可以复用的内部状态,减少对象数量和内存开销。题干里的字符对象数量很多,字体、编码、基本形态可以共享,而位置、颜色等状态可以由外部传入,这正是享元模式常见场景。它不是解决请求传递、状态通知或命令封装的问题。

选项分析

A

正确。享元模式通过共享对象内部状态来减少大量细粒度对象的内存开销。

B

错误。责任链模式用于让请求沿处理链传递,重点是谁来处理请求。

C

错误。观察者模式用于对象状态变化时通知多个依赖对象。

D

错误。命令模式把请求封装成对象,常用于撤销、队列、日志等场景。

本题为什么容易错

享元模式容易被忽略,因为它不像工厂、策略那样直观。做题时不要只看“有很多对象”就乱选,要继续看能不能共享状态。如果每个对象状态完全不同,享元未必合适;如果大量对象有共同部分,且不同部分能外部化,就要想到享元。

先看结论

简短答案

享元模式为什么适合共享大量细粒度对象,正确答案是 A(享元模式)。享元模式用于共享大量细粒度对象中可以复用的内部状态,减少对象数量和内存开销。题干里的字符对象数量很多,字体、编码、基本形态可以共享,而位置、颜色等状态可以由外部传入,这正是享元模式常见场景。它不是解决请求传递、状态通知或命令封装的问题。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
享元模式 本题正确答案 正确。享元模式通过共享对象内部状态来减少大量细粒度对象的内存开销。 看到题干核心场景时优先联想到它
责任链模式 本题干扰项 错误。责任链模式用于让请求沿处理链传递,重点是谁来处理请求。 看到该词不要急着选,先判断是否真正解决题干问题
观察者模式 本题干扰项 错误。观察者模式用于对象状态变化时通知多个依赖对象。 看到该词不要急着选,先判断是否真正解决题干问题
命令模式 本题干扰项 错误。命令模式把请求封装成对象,常用于撤销、队列、日志等场景。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • 责任链模式:错误。责任链模式用于让请求沿处理链传递,重点是谁来处理请求。
  • 观察者模式:错误。观察者模式用于对象状态变化时通知多个依赖对象。
  • 命令模式:错误。命令模式把请求封装成对象,常用于撤销、队列、日志等场景。
复习

知识点详解

享元模式通常会把对象状态分成内部状态和外部状态。内部状态可以被多个对象场景共享,例如字符编码、固定图形、基础属性;外部状态由使用方传入,例如坐标、颜色、当前上下文。考试不一定要求你画完整类图,但会用“大量对象”和“共享状态”两个信号考你是否理解它的使用前提。

备考速记

速记:享元就是共享元件。大量小对象里相同的部分共享,不同的部分外部传。

结构型模式在结构型模式场景中的作用

结构型模式在本题中的核心价值,是解决“某在线文档系统需要显示大量字符对象。很多字符的字体、编码、基本形态可以共享,而位置、颜色、上下文状态由外部传入。为了减少大量相似对象带来的内存开销,较适合采用的设计模式是()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。

拓展

同类题怎么考

  • 给出结构型模式场景,判断应该选择哪个概念、工具、协议或管理过程。
  • 考查结构型模式的作用,要求从四个相近选项中找出最符合题干目标的一项。
  • 把结构型模式和责任链模式、观察者模式、命令模式放在一起考,重点看适用场景是否一致。
  • 题干通常会出现一个关键动作或目标,先定位关键词,再回到选项逐一排除。
结构型模式在软件设计师软考中的考法

软考选择题通常不会只考概念定义,还会把结构型模式放到结构型模式场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。

解题思路

这题先看问题的根:对象太多、太相似、内存压力大。老师讲享元时常拿字符、棋子、图标、小对象池举例。能共享的状态放进享元对象,变化的状态从外部传进来,这样不用为每个位置都创建完整对象。

考点定位

享元模式的题眼是:大量细粒度对象、共享内部状态、外部状态由上下文传入、节省内存。

易错提醒

  • 把所有状态都放进享元对象,导致共享对象被不同上下文互相污染。
  • 只看到对象很多,却没有区分内部状态和外部状态。
  • 把享元模式和对象池混为一谈,忽略享元强调共享可复用状态。

备考提示

  • 设计模式题先抓意图,再看结构。享元的意图是节省大量相似对象的内存。
  • 把享元、单例、原型放在一起比较:单例控制一个实例,原型复制对象,享元共享对象状态。
  • 看到字符、棋子、图标、粒子、大量小对象,先检查是否在考享元。

你可能还想了解

  • 享元模式为什么适合共享大量细粒度对象?
  • 结构型模式是什么?
  • 结构型模式在软件设计师考试中怎么考?
  • 软件设计师结构型模式题怎么理解?
  • 享元模式适合什么场景怎么考?
  • 软件设计师设计模式享元模式怎么考?

本文小结

本题核心考点是结构型模式在结构型模式场景中的判断和应用。遇到类似题目时,先看题干描述的目标,再判断哪个选项最符合场景;本题应选择 A(享元模式)。