资讯动态

软考中级软件设计师:面向对象、UML与设计模式真题贯通指南

发布时间:2026/10/1 9:04:17 来源:尧图企业网站定制
软件设计师这个证我最早是陪同事备考时重新捡起来的。那时我以为面向对象、UML、设计模式不过是大学课本里的名词直到做下午题才发现这三块内容其实是同一套思维方式的三个切面面向对象是底层世界观UML 是表达语言设计模式是被反复验证过的解题套路。软件设计师中级真题里上午题喜欢考概念辨析和细节判断下午题则更狠直接给你一段业务描述、一张残缺类图或者一段代码让你填空、补关系、选模式。很多人复习时把这三块拆开背结果一到综合题就串不起来。我的建议是先把它们当成一个整体来学再用真题去校验自己到底有没有真懂。这篇文章适合正在准备软考中级软件设计师的人也适合想补面向对象、UML、设计模式基础的程序员下面我按自己踩过的坑和实际复习顺序来拆。1. 软考中级软件设计师的“三件套”怎么串起来1.1 为什么面向对象、UML、设计模式总在同一个知识框架里出现这三块内容之所以总被绑在一起不是因为教材故意凑章节而是因为它们解决的是同一个问题的不同阶段。你拿到一个业务需求首先得用面向对象的视角去识别对象、职责、协作关系这是“想清楚”然后你得用 UML 把想法画出来让开发、测试、评审的人都能看懂这是“说明白”最后你发现某些对象创建、组合、交互的方式反复出现于是用设计模式去命名和复用这是“做稳当”。软考中级软件设计师的考法本质上就是检查你有没有这条完整链路。我见过不少人背了一堆设计模式定义但给一个“订单折扣计算”场景他不知道该用策略还是状态。问题就出在面向对象职责分配没学透。比如策略模式的核心不是“有个接口、几个实现类”而是把“变化的价格计算规则”从订单对象里抽出去让订单只依赖抽象。你如果不懂封装变化就会觉得所有模式长得都差不多。UML 也一样类图里的关联、聚合、组合如果只背箭头遇到真题里“部门与员工”“订单与订单项”还是会犹豫。所以我的复习顺序是先补面向对象的关系判断再练 UML 图最后用设计模式收口。从考试分值看上午题里面向对象、UML、设计模式通常混在软件工程、系统设计、程序设计语言等模块里单选题可能考“里氏替换原则”“依赖倒置”“用例之间关系”“类图关系符号”。下午题更集中UML 图几乎年年出现设计模式填空也是高频。你不需要把 23 个模式全部写到能默写代码但必须能看懂类图、能根据场景选模式、能补全关键代码。这个定位很重要别一上来就啃 GoF 原书容易劝退。1.2 上午题和下午题的考查重点差异上午题是 75 道单选考试时间 150 分钟满分 75 分一般需要 45 分合格。它喜欢考“边界”和“例外”。比如用例图中包含关系和扩展关系的区别类图中聚合和组合的生命周期差异设计模式里工厂方法和抽象工厂的适用层级。这些题不需要你写代码但要求你概念清晰。我自己的办法是每遇到一个模糊点就造一个生活例子。聚合像“电脑和鼠标”鼠标可以换组合像“人和心脏”人没了心脏就不完整。这样记比背定义稳。下午题是 5 道大题通常包括数据流图、数据库设计、UML 图、算法设计、面向对象程序设计Java 或 C满分 75 分同样 45 分合格。UML 题常给一个业务场景让你补充用例图、类图或者状态图设计模式题常给类图和代码让你填抽象类、接口、方法调用并判断用了哪个模式。下午题最怕“会背不会用”因为题目会换业务外衣。比如同样是策略模式可能包装成“不同物流公司运费计算”“不同会员等级折扣”“不同加密算法选择”。你如果只记模式名字不看类之间依赖方向填空就会错。我备考时把下午题分成两类画图题和填空题。画图题要练到看到文字描述能快速标出名词和动词名词往往是类或参与者动词往往是用例或方法。填空题要练到先找抽象、再找实现、最后看调用。这个习惯一旦形成做题速度会明显提升。下面我就按这个顺序把面向对象、UML、设计模式的核心细节拆开讲。2. 面向对象从类到多态的底层逻辑2.1 封装继承多态在真题里怎么考封装、继承、多态这三个词谁都会背但软考考的是你能不能判断一段设计好不好。封装不是简单的 private而是把“会变化的部分”藏到稳定接口后面。比如一个用户类如果直接暴露余额字段任何模块都能改后面加风控、加日志就很痛苦如果提供 recharge、deduct 方法内部再校验这就是封装。真题里常问“哪种设计更符合封装原则”答案通常是把数据和对数据的操作放在一起而不是到处 get/set。继承考的是“is-a”关系。学生是人可以继承订单是折扣就不该继承。软考喜欢考继承带来的耦合问题比如父类方法一改子类全受影响。所以后面才有组合优于继承、依赖倒置这些原则。多态考的是“父类引用指向子类对象调用方法时执行子类实现”。上午题可能给你一段 Java 代码问输出结果下午题则可能让你在类图里补抽象方法。多态的关键是动态绑定运行时才决定调哪个方法。你如果分不清重载和重写就容易掉坑重载是同一个类里方法名相同、参数不同编译时决定重写是子类覆盖父类方法运行时决定。我建议你拿一张纸画一个“支付”例子抽象类 Payment 有 pay()子类 WeChatPay、AliPay 分别实现。然后问自己如果新增一个银行卡支付需要改哪些类如果只加新子类不改调用方就符合开闭原则。软考中级软件设计师虽然不直接考你写大型系统但这种判断会渗透在选择题和下午题里。你把一个例子吃透比背十条定义有用。2.2 类之间六种关系与判断技巧UML 类图里的关系是高频考点也是下午题最容易丢分的地方。常见关系有依赖、关联、聚合、组合、泛化、实现。它们不是文字游戏而是描述耦合强度和生命周期。依赖最弱通常表现为一个类的方法参数、局部变量或返回值用到了另一个类比如订单服务调用短信发送器。关联是长期的结构关系通常表现为成员变量比如客户和订单。聚合是整体和部分但部分可以独立存在比如部门和员工部门没了员工还能去别的部门。组合更强部分不能独立于整体比如订单和订单项订单删了订单项没有意义。泛化就是继承子类指向父类空心三角实线。实现是类实现接口空心三角虚线。判断技巧很简单先看是不是“is-a”是就用泛化或实现再看是不是“has-a”是就用关联、聚合或组合最后看生命周期是否一致一致用组合不一致用聚合。很多真题会把“公司包含多个部门”画成组合其实部门可以独立存在更合理是聚合。但考试有时按上下文判断如果题目强调“部门随公司撤销而撤销”那就是组合。所以别死记例子要看题目给的语义。还有一个容易混的是“关联”和“依赖”。如果两个类之间是长期持有的成员变量就是关联如果只是某个方法临时用一下就是依赖。比如“订单类里有个客户字段”是关联“订单类的方法参数里传了一个日志工具”是依赖。这个区分在下午题填关系时很关键因为方向、箭头、菱形都会影响得分。我个人的笨办法是先画名词再问“这个类要不要长期记住另一个类”要就是关联不要就是依赖再问“整体没了部分还能不能活”能就是聚合不能就是组合。这个流程能解决八成题。3. UML用例图、类图、包图的得分点3.1 用例图参与者、包含、扩展、泛化用例图是软考中级软件设计师下午题的常客尤其是“用例图真题”里总爱考参与者、用例、关系。参与者通常是系统外部的人或外部系统比如用户、管理员、支付网关。注意参与者不是系统内部模块别把“数据库”画成参与者除非题目把它当外部系统。用例是系统给参与者提供的完整功能一般用动宾结构比如“提交订单”“查询余额”“导出报表”。如果你写成“订单管理”太笼统可能丢分。关系里最重要的是包含、扩展和泛化。包含是指一个用例一定会用到另一个用例比如“提交订单”必须“登录验证”。扩展是指某个用例在特定条件下才发生比如“下单”可以扩展出“使用优惠券”不是每次都用。泛化是参与者之间或用例之间的继承比如“VIP 用户”泛化“普通用户”或者“支付”泛化出“微信支付”“支付宝支付”。考试里常给一段描述让你判断是包含还是扩展。判断句眼如果描述里说“每次都要”“必须执行”大概率是包含如果说“可选”“可以”“条件触发”大概率是扩展。画用例图时参与者用小人用例用椭圆系统边界用矩形。很多人在 Visio 里把箭头画反。记住参与者到用例一般用直线或箭头表示关联包含和扩展都是虚线箭头箭头指向被包含或被扩展的用例。泛化用空心三角实线。我复习时会把近五年真题里的用例图描述抄下来只写“参与者、用例、关系”三列练两天就能形成条件反射。这个题型性价比很高因为套路稳定分数好拿。3.2 类图属性、方法、关系、可见性类图是 UML 的核心也是设计模式题的底图。一个类通常画成三层类名、属性、方法。可见性符号要记牢 表示 public- 表示 private# 表示 protected~ 表示 package。软考下午题有时会让你补属性或方法注意命名要和业务一致。比如“订单”类可能有 orderId、totalPrice、status方法可能有 addItem、calculateTotal、submit。属性通常写在方法上面类型可写可不写但考试里如果题目给了类型最好写全。类之间的关系我们在上一节讲过这里补充方向。关联可以是单向也可以是双向。单向关联用一个带开放箭头的实线箭头指向被引用的类。比如订单引用客户箭头从订单指向客户。聚合用空心菱形菱形在整体那边。组合用实心菱形菱形也在整体那边。泛化用空心三角实线三角指向父类。实现用空心三角虚线三角指向接口。依赖用虚线开放箭头箭头指向被依赖的类。考试里最容易错的是“菱形画在哪边”。你可以记一句菱形永远贴着“整体”。比如订单和订单项订单是整体菱形画在订单这一端。还有“箭头指向谁”关联、依赖、实现的箭头都指向被引用、被依赖、被实现的接口。泛化指向父类。这个规则能帮你检查。下午题给类图填空时先看已有图形再按规则补不要凭感觉。我见过有人把聚合和组合画反一分没拿到很可惜。3.3 包图与其他 UML 图的应试定位包图考得没有类图和用例图多但也不能完全放弃。包图用来组织模型元素包之间可以有依赖和泛化。考试里常考“包依赖”和“包导入”或者给一个分层架构让你判断包之间关系。比如表现层依赖业务层业务层依赖数据层箭头指向被依赖的包。包图的核心是“高内聚、低耦合”如果两个包互相依赖通常说明设计有问题。你画包图时把功能相近的类放一个包比如 user、order、payment、common。其他 UML 图包括序列图、活动图、状态图、构件图、部署图。序列图考消息顺序常给一个场景让你补消息注意同步消息用实心箭头异步消息用开放箭头返回消息用虚线。活动图考流程、分支、并发适合描述业务工作流。状态图考对象生命周期比如订单从待支付到已支付、已发货、已完成、已取消。构件图和部署图偏架构软件设计师中级偶尔出现知道概念即可。我的建议是把用例图、类图、包图练熟序列图和状态图能看懂活动图会补分支其他图理解定义。这样时间分配最划算。3.4 Visio 画 UML 类图的实操流程热词里有人问“用 Visio 怎么画 UML 类图”我实际用过几个版本流程大同小异。打开 Visio新建空白绘图在左侧形状搜索里找“UML 类图”或“软件和数据库”类别。如果找不到可以直接搜“类”。拖一个“类”形状到画布双击修改类名在属性区和操作区填内容。可见性符号可以手动输入 是 public- 是 private# 是 protected。注意 Visio 不同版本对 UML 的支持位置不一样有的在“软件”模板里有的需要从“更多形状”里调。画关系时从形状库拖“关联”“泛化”“聚合”“组合”“依赖”等连接线或者用普通连接线改线型。泛化是空心三角实线实现是空心三角虚线聚合是空心菱形组合是实心菱形依赖是虚线开放箭头。Visio 里有时默认箭头不对需要右键设置线端。我的经验是先画类框再统一加关系最后调线。别一边画一边调格式容易乱。画完导出 PNG 或复制到 Word检查类名、属性、方法、关系方向。考试虽然不一定用 Visio但练熟之后你对类图元素的敏感度会明显提高。如果你不想装 Visio也可以用文本工具画类图比如 PlantUML。下面这段可以帮你理解类图结构不用背语法关键看关系。startuml class Order { -orderId: String -totalPrice: double addItem(item: OrderItem): void calculateTotal(): double } class OrderItem { -name: String -price: double -count: int } interface DiscountStrategy { calc(price: double): double } class VipDiscount { calc(price: double): double } class NormalDiscount { calc(price: double): double } Order 1 *-- n OrderItem Order -- DiscountStrategy DiscountStrategy |.. VipDiscount DiscountStrategy |.. NormalDiscount enduml这段里Order 和 OrderItem 是组合Order 依赖 DiscountStrategy两个实现类实现接口。你如果能把这段和图对应起来下午题的设计模式类图就不容易慌。4. 设计模式23 个不用全背先抓高频4.1 创建型模式对象怎么生创建型模式解决对象创建问题。软考高频的是简单工厂、工厂方法、抽象工厂、单例建造者和原型偶尔考。简单工厂不算 GoF 23 种但考试很爱考因为它结构简单、代码好填。它用一个工厂类根据参数创建不同产品缺点是新增产品要改工厂违反开闭原则。工厂方法是把创建延迟到子类每个产品对应一个工厂子类符合开闭但类变多。抽象工厂用于产品族比如同一风格下的按钮和文本框适合多平台 UI。单例保证一个类只有一个实例注意私有构造、静态变量、静态获取方法。我复习时会把它们放在一起对比。简单工厂像“一个总开关你报名字我创建”工厂方法像“每个产品自己带一个车间”抽象工厂像“一整条产品线同一品牌一起生产”。单例的坑在于线程安全和序列化但考试一般只考结构。上午题可能问“哪种模式符合开闭原则”答案通常是工厂方法或抽象工厂而不是简单工厂。下午题可能给一个日志记录器场景让你选单例。你只要抓住“唯一实例”这个点就行。4.2 结构型模式对象怎么组结构型模式关注类和对象怎么组合。高频的是适配器、装饰、代理、外观桥接、组合、享元偶尔出现。适配器解决接口不兼容比如旧系统接口和新系统接口不一致用适配器转一下。装饰器在不改原类的情况下动态加功能比如 Java IO 里的流。代理控制访问比如远程代理、保护代理、虚拟代理。外观提供统一入口简化子系统调用比如一键启动电脑。桥接把抽象和实现分离适合多维度变化。组合把对象组成树形结构比如文件和文件夹。享元共享细粒度对象节省内存。考试里常混的是装饰和代理。装饰强调增强功能代理强调控制访问。装饰通常持有被装饰对象的引用并实现同一接口代理也实现同一接口但控制访问。比如“给图片加缓存”更像代理“给咖啡加糖加奶”更像装饰。适配器是“接口转换”外观是“简化调用”。你如果记不住就记场景不兼容用适配器加功能用装饰控访问用代理简化用外观共享用享元树形用组合多维用桥接。4.3 行为型模式对象怎么协作行为型模式最多但软考常考策略、观察者、模板方法、职责链命令、状态、迭代器、中介者、备忘录也出现过。策略模式把算法家族封装起来让它们可互换比如不同折扣、不同运费。观察者模式定义一对多依赖状态一变通知所有观察者比如事件监听、消息订阅。模板方法定义算法骨架把可变步骤交给子类比如数据库访问模板。职责链把请求沿链传递直到有人处理比如审批流程。状态模式让对象在内部状态改变时改变行为比如订单状态。命令模式把请求封装成对象支持撤销、排队。迭代器提供遍历集合的统一接口。策略和状态最容易混。策略是外部选择算法客户端知道不同策略状态是内部状态迁移行为随状态自动变。比如“会员折扣”是策略客户端选普通或 VIP“订单状态”是状态待支付只能支付已支付才能发货。观察者和中介者也容易混。观察者是目标直接通知观察者中介者是对象之间不直接通信通过中介者转发。模板方法和策略都涉及算法变化但模板方法用继承固定骨架策略用组合替换整个算法。你把这些区别写在一张表里考前翻一遍比刷十道题有效。4.4 下午题设计模式填空的判分点下午题设计模式题通常给类图、一段场景、一段残缺代码。判分点一般包括识别模式名称、补全抽象类或接口、补全子类实现、补全调用关系、判断新增功能时应该改哪里。答题时先找抽象。类图里如果有接口或抽象类并且有多个实现类大概率是策略、工厂、观察者或命令。再看调用方持有的是抽象类型还是具体类型。如果持有抽象类型并且运行时替换就是策略。如果创建对象由工厂负责就是工厂。如果一对多通知就是观察者。填空代码时注意方法签名要一致。接口里定义了calc(double price)子类实现不能改成calc(int price)。返回类型、参数类型、方法名都要对。调用方如果写strategy.calc(price)你补的字段类型应该是接口类型而不是具体类。如果题目问“新增一种折扣需要修改哪些类”策略模式通常只需新增实现类调用方和上下文不用改符合开闭原则。工厂方法可能需要新增工厂子类简单工厂需要修改工厂类。这个区别是高频判分点别答反。5. 实操用 Java 和 Python 把模式跑起来5.1 Java 策略模式简单工厂订单折扣案例下面这段 Java 代码把策略和简单工厂放在一起方便你对照类图。场景是订单折扣普通用户不打折VIP 打九折超级 VIP 打八折。策略接口负责计算工厂负责创建策略上下文负责调用。interface DiscountStrategy { double calc(double price); } class NormalDiscount implements DiscountStrategy { public double calc(double price) { return price; } } class VipDiscount implements DiscountStrategy { public double calc(double price) { return price * 0.9; } } class SuperVipDiscount implements DiscountStrategy { public double calc(double price) { return price * 0.8; } } class DiscountFactory { public static DiscountStrategy create(String type) { if (vip.equalsIgnoreCase(type)) { return new VipDiscount(); } else if (superVip.equalsIgnoreCase(type)) { return new SuperVipDiscount(); } return new NormalDiscount(); } } class OrderContext { private DiscountStrategy strategy; public OrderContext(DiscountStrategy strategy) { this.strategy strategy; } public double finalPrice(double price) { return strategy.calc(price); } } public class Main { public static void main(String[] args) { DiscountStrategy strategy DiscountFactory.create(vip); OrderContext context new OrderContext(strategy); System.out.println(context.finalPrice(100)); } }这段代码里DiscountStrategy是抽象三个实现类是具体策略DiscountFactory是简单工厂OrderContext是上下文。你拿着这段代码去画类图就能看到接口实现关系、工厂依赖关系、上下文关联关系。软考下午题如果考策略填空往往就是implements DiscountStrategy、strategy.calc(price)、new VipDiscount()这类。别小看这些空它们就是判分点。5.2 Python 面向对象sqlite3观察者与持久化热词里有python sqlite3 面向对象我顺手写一个观察者加 sqlite3 持久化的小例子。场景是用户注册成功后通知邮件服务和日志服务同时把用户写入 SQLite。观察者负责通知仓储类负责持久化。这样你能同时练面向对象、设计模式和数据库操作。import sqlite3 class User: def __init__(self, user_id, name, email): self.user_id user_id self.name name self.email email class UserRepository: def __init__(self, db_pathtest.db): self.conn sqlite3.connect(db_path) self.create_table() def create_table(self): sql CREATE TABLE IF NOT EXISTS users ( user_id INTEGER PRIMARY KEY, name TEXT NOT NULL, email TEXT NOT NULL ) self.conn.execute(sql) self.conn.commit() def save(self, user): sql INSERT OR REPLACE INTO users (user_id, name, email) VALUES (?, ?, ?) self.conn.execute(sql, (user.user_id, user.name, user.email)) self.conn.commit() class Observer: def update(self, user): pass class EmailObserver(Observer): def update(self, user): print(f发送欢迎邮件给 {user.email}) class LogObserver(Observer): def update(self, user): print(f记录日志用户 {user.name} 注册成功) class UserService: def __init__(self, repository): self.repository repository self.observers [] def attach(self, observer): self.observers.append(observer) def register(self, user): self.repository.save(user) for observer in self.observers: observer.update(user) if __name__ __main__: repo UserRepository() service UserService(repo) service.attach(EmailObserver()) service.attach(LogObserver()) service.register(User(1, 张三, zhangsanexample.com))这个例子里UserRepository封装了 sqlite3 连接和建表Observer定义通知接口两个观察者实现具体通知UserService既依赖仓储又维护观察者列表。你可以把它画成类图会看到关联、依赖、实现、组合。软考不会让你写这么完整的代码但这种练习能让你在下午题填空时知道哪个类该持有哪个接口。5.3 从代码反推 UML 类图从代码反推类图是检验面向对象和 UML 是否打通的好方法。拿上面的 Python 例子先找类User、UserRepository、Observer、EmailObserver、LogObserver、UserService。再找关系EmailObserver 和 LogObserver 继承 Observer这是泛化UserService 持有 UserRepository这是关联UserService 持有 Observer 列表这是聚合或关联取决于生命周期观察者可以独立存在所以聚合更合适UserService 的 register 方法调用 repository.save这是依赖。最后补属性和方法User 有 user_id、name、emailUserRepository 有 conn、create_table、saveObserver 有 updateUserService 有 repository、observers、attach、register。你如果能不看书把这个类图画出来说明面向对象和 UML 基本过关。我当年复习时就是这么干的先写 50 行代码再画类图再对照设计模式定义。画错了就改改完再画。这个方法比单纯看视频有效因为你在主动建立映射。软考下午题的设计模式题本质就是让你做反向映射题目给类图你补代码。你平时多做正向和反向练习考场上就不会懵。6. 常见问题与排查技巧实录6.1 概念混淆速查表下面这张表是我自己整理的高频混淆点考前翻一遍很管用。注意表格里的判断依据不是绝对但能解决大多数真题。混淆点判断依据常见场景聚合 vs 组合部分能否独立存在部门与员工是聚合订单与订单项是组合关联 vs 依赖是否长期持有成员变量客户与订单是关联方法参数传日志是依赖包含 vs 扩展是否每次必做登录验证是包含使用优惠券是扩展策略 vs 状态算法由外部选还是状态自动变会员折扣是策略订单状态是状态工厂方法 vs 抽象工厂创建单个产品还是产品族一个日志器是工厂方法跨平台 UI 是抽象工厂装饰 vs 代理增强功能还是控制访问加糖加奶是装饰图片懒加载是代理重载 vs 重写编译时还是运行时同名不同参是重载子类覆盖父类方法是否重写泛化 vs 实现继承类还是实现接口学生继承人是泛化类实现接口是实现这张表建议你自己再补充比如“模板方法 vs 策略”“观察者 vs 中介者”。写下来的过程比看别人总结更有用。我每次做错题都会把错误点加进表里考前只看表。软件设计师中级真题里很多题就是考这些边界你分清了上午题正确率会明显提高。6.2 画图和答题常见错误画 UML 图时我最常见的错误有把参与者画在系统边界里面把用例写成名词关系箭头画反菱形画在部分那边泛化用虚线实现用实线。这些都是硬伤阅卷时直接扣分。正确的做法是先画系统边界再画参与者再画用例最后连关系。连接关系时每画一条都问自己“箭头指向谁”“菱形贴谁”“虚线还是实线”。我考试时会在草稿纸上写四个符号泛化实线空心三角实现虚线空心三角聚合空心菱形组合实心菱形。画图前看一眼能避免低级错误。下午题设计模式填空时常见错误是方法签名写错、抽象类没加 abstract、接口实现没写 implements、调用方类型写成具体类。还有同学看到“工厂”就填简单工厂结果题目要求符合开闭原则应该填工厂方法。答题时一定要看题目里的“新增”“扩展”“不修改原有代码”这些关键词它们往往在暗示开闭原则。如果题目说“当需要增加新的类型时只需要增加新的类”那大概率是策略、工厂方法、观察者这类模式。你按这个线索判断比背模式定义更准。6.3 真题刷题与错题复盘软考中级软件设计师真题是最好的复习材料但刷法很重要。我的建议是上午题按模块刷先刷面向对象、UML、设计模式相关章节把错题标出来。下午题按题型刷先刷 UML 和设计模式再刷数据流图和数据库。每套真题做完后不要只对答案要写复盘这题考什么概念我为什么错正确判断依据是什么下次遇到类似题怎么识别。我通常用三栏题目、考点、避坑句。比如“组合 vs 聚合”的避坑句是“看生命周期是否同生共死”。刷题时间安排上前期可以按知识点刷后期必须按套卷刷。因为考试有时间压力上午 150 分钟 75 题平均两分钟一题下午 150 分钟 5 道大题每道 30 分钟。你如果平时不掐时间考场上容易做不完。我自己的节奏是上午题前 40 分钟做会做的中间 60 分钟啃计算和设计最后 50 分钟检查涂卡。下午题先做 UML 和设计模式因为套路熟拿分稳再做数据库和数据流图最后做算法题。这个顺序不一定适合所有人但核心是先把稳的分拿到手。7. 备考节奏和个人踩坑7.1 四周冲刺安排如果你现在离考试还有四周可以按这个节奏走。第一周主攻面向对象和 UML。每天两小时先看类关系判断再画用例图、类图、包图。每学一个概念就找一个生活例子。比如把“学校、学生、课程、成绩”画成类图标出关联、聚合、泛化。第二周主攻设计模式。不要 23 个平均用力先抓策略、工厂、观察者、模板方法、职责链、适配器、装饰、代理、单例。每个模式写 30 行代码再画类图。第三周刷近五年真题。上午题按套刷下午题按题型刷。错题整理到速查表。第四周模拟考试查漏补缺。重点看错题本和速查表不再学新内容。每天的时间分配也要注意。如果你只有晚上两小时可以一小时看知识点一小时做题。周末拿出整块时间做套卷。不要一整天只看视频看视频容易产生“我会了”的错觉。必须动手画图、写代码、填答案。我见过很多人视频看了三遍做题还是错就是因为没有输出。软件设计师中级备考输入和输出比例至少 1:1最好 1:2。你画十张类图比看十个视频有用。7.2 我踩过的坑和最后提醒我踩过的第一个坑是轻视上午题。我一开始觉得上午题都是选择题随便蒙蒙也能过结果做真题才发现很多题考得很细比如“里氏替换原则”和“依赖倒置原则”的区别“用例图中的扩展点”怎么标。第二个坑是设计模式只背名字。我能说出 23 个模式的名字但给一个场景就不知道选哪个。后来我改成按“变化点”记变化的是算法用策略变化的是对象创建用工厂变化的是状态用状态变化的是通知用观察者。第三个坑是 UML 箭头画反。这个只能靠多画我后来把六种关系的符号抄在便利贴上贴在电脑边画一次看一次一周就记住了。最后提醒几句实在的。考试时遇到不会的题先跳过别死磕。上午题涂卡要留时间下午题字迹要清楚类图名称别写错。设计模式填空如果拿不准先把抽象类、接口、方法签名补对能拿步骤分。UML 题先找名词和动词名词做类或参与者动词做用例或方法。真题里重复考的点就是你必须拿下的点。我个人的体会是软件设计师中级并不考你有多深奥它考的是你有没有把面向对象、UML、设计模式这三块连成一张网。网织好了题目怎么换皮你都能找到线头。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑