作业二:读书笔记——软件设计原则、设计模式
这个作业属于哪个课程 | 2022软件代码开发技术 |
---|---|
这个作业要求在哪 | 读书笔记----软件设计原则、设计模式 |
这个作业的目标 | 熟悉软件设计原则和设计模式 |
参考书籍
归纳总结
软件设计原则
-
里氏代换原则
在任何情况下,子类对象必须可以替代基类对象,子类不能添加任何父类没有的附加约束。
-
开闭原则
类或模块应该对扩展开放,对修改关闭。实现技术包括抽象类abstract和接口interface。
-
依赖倒转原则
高层模块不应该依赖于底层模块,它们都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象。
-
单一职责原则
一个类不应该有多个原因会引起其变化,也就是说一个类应当只有一种职责。
-
接口隔离原则
应该一个类实现多个接口,且仅实现必须的接口;不应该建立一个庞大的接口供所有依赖它的类使用。
-
迪米特法则
一个软件实体(类/模块/函数)应当尽可能少地与其它实体发生相互作用
设计模式
-
单例模式
保证某个类只有一个实例,并且可以全局访问该实例。
所有类都可以很轻松访问单例类,但这也促进了全局变量的增多以及本来可能不会出现的耦合的发生。在使用单例模式时需要仔细考虑自己是否需要这个单例,是否可以通过简单的方法传参或者聚合来实现本来的需求。
-
观察者模式
当被观察者的状态发生变化时,通知其所有观察者,观察者再对通知作出响应。
MVC架构的根本就是观察者模式,广泛应用于各类软件开发中。在游戏开发中的应用主要是使用MVC架构的UI框架以及将某个模块与其他模块解耦的解决方法。
-
状态模式
状态模式的应用是状态机。最基本的有限状态机(Finite State Machine,FSN)定义了一系列状态、状态转移及其需要的条件。
游戏开发中也大量应用了状态机,如图形库OpenGL中用OpenGL上下文记录了渲染状态信息,实时根据状态信息进行绘制;游戏中动画间的切换以及游戏中的AI等等都涉及状态机。
-
双缓冲模式
在图形渲染中,要显示在屏幕上的图像信息存储在一个缓冲区中,如果使用单缓冲区渲染的话,因为逐行逐像素绘制,从而可能导致图像闪烁。双缓冲模式令前缓冲保存着最终输出的图像,它会在屏幕上显示;而所有的的渲染指令都会在后缓冲上绘制。当所有的渲染指令执行完毕后,交换前缓冲和后缓冲,这样图像就立即呈现出来,解决图像闪烁问题。
-
对象池模式
当需要使用某个对象时,从固定的池中重用对象,以提高性能和内存利用率。
当需要频繁创建和销毁对象,每个对象创建和销毁的代价大,而且数据可重用时,考虑使用对象池来减少创建和销毁对象的开销。
-
工厂模式
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
-
原型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
-
享元模式
通过将对象数据切分成两种类型,然后在每个对象实例之间共享内部状态数据来节省内存。可以与工厂模式结合,创建并管理共享的享元对象。
心得体会
实际开发中,观察者模式可以进一步修改为发布/订阅模式,使得发布者可以发送消息到消息中心/事件中心,再由消息中心/事件中心调度转发给各个订阅者,发布者和订阅者间并无关联,以此实现模块与模块之间的解耦;对于频繁生成销毁的对象,用对象池收纳暂时不用的对象以供之后复用,以此减少开销;享元模式在图形渲染中可以在多个实例间共享一些相同的资源,如材质、着色器、模型等,以此提高性能。
遵循基本的设计原则、合理巧妙地利用设计模式思想,可以让代码开发逻辑更清晰。