以下是我在总结的复习内容,有需要可以参考借鉴一下。我的主页还有另外一篇复习总结《仲恺ZK——信计专业《软件体系结构》,两者结合起来复习,帮助你轻松过考试😊。总的来说,考试不会太难,只要你了解了各类设计模式的含义即可(真的就是了解即可,能从含义确认出是什么设计模式就👌了。不需要学会默写,因为考试的时候这么多选择题选项可以参考😄。
如果需要资料的话可以私信我,我通过邮箱📮发送给各位💪。
资料总结也有错误❎,欢迎大家批评指正👏。
考试前景
老师给的复习提纲
2023-2024复习提纲(覆盖面85%)
1.单例模式:创建型设计模式,用于确保一个类只有一个实例,并提供全局访问点。
2.装饰模式:结构型设计模式,用于动态地给对象添加额外的职责,而不影响其接口。
3.观察者模式:行为型设计模式,用于建立一种一对多的依赖关系,当一个对象状态发生改变时,其依赖对象会自动收到通知。
4.抽象类和继承:面向对象的基本概念,用于实现代码的复用和继承关系的建立。
5.工厂模式:创建型设计模式,用于创建一系列相关或相互依赖的对象,而无需指定具体类。
6.适配器模式:结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口。
7.中介者模式:行为型设计模式,用于封装一组对象之间的交互,使其更加松散耦合。
8.外观模式:结构型设计模式,为一组复杂的子系统提供一个简单的接口,使其更易于使用。
9.代理模式:结构型设计模式,为其他对象提供一种代理以控制对这个对象的访问。
10.继承违反封装性:面向对象的基本原则,指的是将对象的状态和行为封装在一起,并限制对内部实现的访问。
11.适配器模式的应用场景:当你想使用一个已经存在的类,但其接口不符合你的需求时,可以使用适配器模式进行接口转换。
12.创建型设计模式包括:单例模式、工厂模式、抽象工厂模式、建造者模式和原型模式等。
13.开放封闭原则:面向对象的基本原则,指的是一个软件实体(类、模块、函数等)应当对扩展开放,对修改关闭。
14.组合模式:结构型设计模式,用于表示对象的部分-整体层次结构,并能够以统一的方式处理对象和对象集合。
15.面向对象设计原则,特别是单一职责、里氏代换原则。
16.装饰器模式、桥接模式、命令模式、观察者模式、策略模式、享元模式、原型模式、责任链模式、状态模式、备忘录模式、迭代器模式、组合模式、访问者模式、依赖倒转原则、桥接模式、迭代器模式、代理模式和适配器模式。
17.工厂模式和抽象工厂模式。单例模式和享元模式。
18.集合型设计模式(组合模式)
19.装饰器模式与继承的区别。
20.考查面向对象编程的基本概念和实现(责任链,接口模式等)。
老师给的考试题型
一、选择题(本题包含15小题,每题2分,共30分)
二、填空(本题包含5个空,每题2分,共10分)
三、判断题(本题包含5小题,每题2分,共10分)or 多选题(本题包含5小题,每题2分,共10分)
四、简答(本题包含3小题,每题10分,共20分)
五、案例(本题包含1小题,共20分) 课上教过的都可能涉及!
2024年考试回忆
考试题型一共分为:
- 选择题
- 填空题
- 多选题
- 简答题
- 案例分析题
选择题
选择题大致来说不难,很多道题目都考了同一种设计模式,所以可以根据上下题目选项来推断出答案。还有几道题考了软件设计原则,也很简单,整体来说不难,只要熟悉和了解了23种设计模式的含义就能过啦😆。和历年真题相似度不高,和学习通的选择题相似度也不高,所以还是要回归知识本身,好好熟悉设计模式的含义和适用性就可以💪⛽️。
填空题
第一道和第二道考了给你设计模式的含义,让你写出是什么设计模式,这个很简单。第三道是给你的一个设计原则的含义,让你写出他该原则的名字,这个也很简单。如果想不起来是什么设计模式,还可以参照前面选择题,全卷参考一下,总能得出答案。
第四道题考的是使用Redo和Undo案例的是什么设计模式?答案是:命令模式
多选题
方法与选择题一致,熟悉设计模式即可。
简答题
第一题:集合模式有那些,分别解释他们?
第二题:装饰器模式和继承的区别?
- 装饰器模式强调在运行时动态地添加功能,而继承则是在编译时静态地定义类之间的关系。
- 装饰器模式更加灵活,可以将功能模块化并组合使用,而继承则会引入类之间的耦合关系,可能导致类层次结构的复杂性增加。
- 使用装饰器模式时,可以避免修改原始类的代码,而继承通常需要修改父类或子类的代码。
- 装饰器模式适用于在运行时动态地修改对象的行为,而继承适用于在编译时定义类之间的静态关系
第三题:写出一个Person类的(姓名、年龄、班级)的存取器
class Person{
private String name;
private int age;
private String class;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
public void setClass(String class){
this.class = class;
}
public String getClass(){
return class;
}
}
案例题
⚠️以下是我的题目回忆,可能不完全是该考题,大家可以当作学习即可。我的答案也不一定正确,欢迎👏大家批评指出错误❎。
有一个类OrderArray,实现了两种方法分别是BinarySearch(二分查找)和SequentiaSearch(顺序查找)。
-
请画出类图
-
请写出OrderArray代码
public class OrderArray {
private int[] array;public OrderArray(int[] arr) { array = arr; } public int binarySearch(int target) { int left = 0; int right = array.length - 1; while (left <= right) { int mid = left + (right - left) / 2; if (array[mid] == target) { return mid; } else if (array[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return -1; // Not found } public int sequentialSearch(int target) { for (int i = 0; i < array.length; i++) { if (array[i] == target) { return i; } } return -1; // Not found }
}
- 请写出main方法
public class Main { public static void main(String[] args) { int[] arr = {1, 3, 5, 7, 9, 11, 13}; OrderArray orderArray = new OrderArray(arr); int target = 7; int binaryResult = orderArray.binarySearch(target); System.out.println("Binary search result: " + binaryResult); int sequentialResult = orderArray.sequentialSearch(target); System.out.println("Sequential search result: " + sequentialResult); } }
4 . 请画出时序图