文章目录
- 试题一:数据流图
-
- [💖 基本图形元素](#💖 基本图形元素)
-
- [1. 外部实体](#1. 外部实体)
- [2. 数据存储](#2. 数据存储)
- [3. 加工](#3. 加工)
- [4. 数据流](#4. 数据流)
- [📚 例题](#📚 例题)
- [试题二:数据库 ER-图](#试题二:数据库 ER-图)
- [试题三:UML 图](#试题三:UML 图)
- 试题四:设计模式
- [💖 基础知识](#💖 基础知识)
-
- [1. 简单工厂](#1. 简单工厂)
- [2. 工厂方法](#2. 工厂方法)
- [📚 例题](#📚 例题)
-
- [1. 抽象工厂](#1. 抽象工厂)
-
- [📙 题目](#📙 题目)
- [2. 生成器模式(建造者模式)](#2. 生成器模式(建造者模式))
-
- [📙 题目](#📙 题目)
- [3. 原型模式](#3. 原型模式)
-
- [📙 题目](#📙 题目)
- [4. 适配器模式](#4. 适配器模式)
-
- [📙 题目](#📙 题目)
- [5. 桥接模式](#5. 桥接模式)
-
- [📙 题目](#📙 题目)
- [6. 组合模式](#6. 组合模式)
-
- [📙 题目](#📙 题目)
- [7. 装饰器模式](#7. 装饰器模式)
-
- [📙 题目](#📙 题目)
- [8. 享元模式](#8. 享元模式)
-
- [📙 题目](#📙 题目)
- [9. 命令模式](#9. 命令模式)
-
- [📙 题目](#📙 题目)
- [10. 观察者](#10. 观察者)
-
- [📙 题目](#📙 题目)
- [11. 状态模式](#11. 状态模式)
-
- [📙 题目](#📙 题目)
- [11. 策略模式](#11. 策略模式)
-
- [📙 题目](#📙 题目)
- [13. 访问者模式](#13. 访问者模式)
-
- [📙 题目](#📙 题目)
- [14. 中介者模式](#14. 中介者模式)
-
- [📙 题目](#📙 题目)
试题一:数据流图
数据流图:Data Fluid Diagram(DFD)
💖 基本图形元素
1. 外部实体

2. 数据存储

3. 加工

4. 数据流

📚 例题

(1)实体名称
看 子图,看数据流的加工,定位文字说明

(2)数据存储名称
文章中没有具体的数据存储名称,后面加表或者文件就可以了

(3)数据流

① 父子图平衡
结合父图看子图的数据流有没有缺失
② 加工有输入有输出

- 黑洞:缺少以此加工为起点的数据流(加工输出到其他)
- 白洞:缺少以此加工为终点的数据流(其他输入到加工)
④ 数据守恒
子图的加工 找 对应的文字描述

⑤ 答题格式

参考答案

(4)疑难杂题
① 结构化语言

② 数据流是否应该存在

③ 改进数据流

④ 分析输入输出

试题二:数据库 ER-图
💖 基本图形元素

1. 实体
- 弱实体
- 父子实体
2. 属性
某个属性有下划线:主键

- 简单属性:不可再分,原子的
- 复合属性:可以细分为更小的部分
3. 联系
- 一个:1
- 多个:
n
、m
、*


💖 关系模式
1. 基本概念

主键一般直接给出
2. 一对一关系
3. 一对多
外键给到 多的一方:把一
那方的主键 作为外键属性 给 多
方的实体
4. 多对多
取


5. 三个实体的联系转换
有联系的,把主键都加进去,作为新的主键

6. 实体父类和子类的转换
- 父类的主键 加到 子类 中去
📚 例题

(1)缺失的联系


(2)补充关系模式
- 完整性约束关系:就是主键和外键
- 主键下面是实线
- 外键下面是虚线
(3) 疑难杂题

试题三:UML 图
软考近几年主要是考察 类图 和 用例图
💖 基础知识
1. 关系

(1)依赖关系
一个事务的变化引起另一个变化

(2)关联关系
描述整体和部分之间的关系


聚集
- 聚合(空心菱形):好聚好散,可以独立存在
- 组合(实心菱形) :一个组的,同生共死
(3)泛化关系
- 子类 指向 父类 (空心三角形;聚合是空心菱形)
- 特殊 和 一般
- 继承:父类指向子类
(4)实现关系
- 接口和实现类
2. 类图
java
聚集分为聚合:空心,组合:实心
关联:无向边
依赖:虚线箭头
泛化(继承):实线三角箭头
实现:虚线三角箭头

3. 用例图

(1)包含关系
虚线箭头 指向被包含用例(箭头指向的表示必须有)

(2)扩展关系
《extend》 虚线箭头 指向基本用例(箭头指向的表示必须有)


(3)泛化关系
实线空心三角形
继承的反义词,B继承A,A泛化B

📚 例题

(1)用例名
主要在描述中看:用户能够做的事情 ,也就是参与者的动作 ,这就是用例


(3)用例关系
- 包含:A包含B,先执行 B 再执行 A (《inlcude》:虚线箭头指向 B)
- 扩展:B扩展A,B是A的特殊情况下的备用事件(类似于异常)(《extend:虚线箭头指向A》)
- 泛化:继承的反义

(3)类名
- 注意文章描述中的英文 ,可能就是类名
- 从图中已有的类名入手
- 找泛化关系,也就是继承 :(机器人和传感器)
(4)疑难杂题(事件流)
- 基本事件流:正确发生的执行流程
- 备选事件流:出错的处理事件和可选事件


试题四:设计模式
💖 基础知识
1. 简单工厂

java
public class SimpleFactory {
public static void main(String[] args) {
Product productA = Factory.createProduct("A");
productA.info();
Product productB = Factory.createProduct("B");
}
}
abstract class Product {
public abstract void info();
}
class Factory {
public static Product createProduct(String type) {
Product product = null;
switch (type) {
case "A":
product = new ProductA();
break;
case "B":
product = new ProductB();
break;
default:
System.out.println("没有 " + type + " 类型的产品!");
break;
}
return product;
}
}
class ProductA extends Product {
@Override
public void info() {
System.out.println("产品的信息:A");
}
}
class ProductB extends Product {
@Override
public void info() {
System.out.println("产品的信息:B");
}
}
2. 工厂方法
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。

把 简单工厂 的一个工厂 换成 多个工厂,定义一个工厂接口(工厂方法)

java
public class FactoryMethod {
public static void main(String[] args) {
Factory factoryA = new FactoryA();
// 父类 对象名 = new 子类();
Product productA = factoryA.createProduct();
// Product productA = new ProductA();
productA.info();
Factory factoryB = new FactoryB();
Product productB = factoryB.createProduct();
productB.info();
}
}
// class Factory
interface Factory {
public Product createProduct();
}
class FactoryA implements Factory {
@Override
public Product createProduct() {
return new ProductA();
}
}
class FactoryB implements Factory {
@Override
public Product createProduct() {
return new ProductB();
}
}
// abstract class Product
interface Product {
// public abstract void info();
public void info();
}
// class ProductA extends Product
class ProductA implements Product {
@Override
public void info() {
System.out.println("产品的信息:A");
}
}
// class ProductB extends Product
class ProductB implements Product {
@Override
public void info() {
System.out.println("产品的信息:B");
}
}
📚 例题
1. 抽象工厂
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
抽象工厂模式提供了一种创建一系列相关或相互依赖对象的接口,而无需指定具体实现类。通过使用抽象工厂模式,可以将客户端与具体产品的创建过程解耦,使得客户端可以通过工厂接口来创建一族产品。
📙 题目


2. 生成器模式(建造者模式)
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

📙 题目

3. 原型模式
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

📙 题目
- 注意是实现Cloneable接口
- 注意类型转换
4. 适配器模式
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
左边继承 右边传参

📙 题目

5. 桥接模式
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
📙 题目

6. 组合模式
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。

📙 题目

***

7. 装饰器模式
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。

📙 题目

8. 享元模式
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。
享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。我们将通过创建 5 个对象来画出 20 个分布于不同位置的圆来演示这种模式。由于只有 5 种可用的颜色,所以 color 属性被用来检查现有的 Circle 对象。

📙 题目

9. 命令模式
命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。


📙 题目

10. 观察者
观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。
📙 题目

11. 状态模式
在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。
在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。

📙 题目





11. 策略模式
在策略模式(Strategy Pattern)中一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
在策略模式定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相替换。通过使用策略模式,可以在运行时根据需要选择不同的算法,而不需要修改客户端代码。

📙 题目

13. 访问者模式
在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。

📙 题目

14. 中介者模式
中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。

📙 题目
