• 2022软件代码开发技术:作业二


    作业二:读书笔记——软件设计原则、设计模式

    这个作业属于哪个课程 2022软件代码开发技术
    这个作业要求在哪 读书笔记----软件设计原则、设计模式
    这个作业的目标 熟悉软件设计原则和设计模式

    参考书籍

    游戏编程模式

    归纳总结

    软件设计原则

    • 里氏代换原则

      在任何情况下,子类对象必须可以替代基类对象,子类不能添加任何父类没有的附加约束。

    • 开闭原则

      类或模块应该对扩展开放,对修改关闭。实现技术包括抽象类abstract和接口interface。

    • 依赖倒转原则

      高层模块不应该依赖于底层模块,它们都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象。

    • 单一职责原则

      一个类不应该有多个原因会引起其变化,也就是说一个类应当只有一种职责。

    • 接口隔离原则

      应该一个类实现多个接口,且仅实现必须的接口;不应该建立一个庞大的接口供所有依赖它的类使用。

    • 迪米特法则

      一个软件实体(类/模块/函数)应当尽可能少地与其它实体发生相互作用

    设计模式

    • 单例模式

      保证某个类只有一个实例,并且可以全局访问该实例

      所有类都可以很轻松访问单例类,但这也促进了全局变量的增多以及本来可能不会出现的耦合的发生。在使用单例模式时需要仔细考虑自己是否需要这个单例,是否可以通过简单的方法传参或者聚合来实现本来的需求。

    • 观察者模式

      当被观察者的状态发生变化时,通知其所有观察者,观察者再对通知作出响应。

      MVC架构的根本就是观察者模式,广泛应用于各类软件开发中。在游戏开发中的应用主要是使用MVC架构的UI框架以及将某个模块与其他模块解耦的解决方法

    • 状态模式

      状态模式的应用是状态机。最基本的有限状态机(Finite State Machine,FSN)定义了一系列状态、状态转移及其需要的条件。

      一张画有盒子的图表,盒子代表了站立,跳跃,俯卧和跳斩。标记了按键的按下和释放的箭头连接了这些盒子。

      游戏开发中也大量应用了状态机,如图形库OpenGL中用OpenGL上下文记录了渲染状态信息,实时根据状态信息进行绘制;游戏中动画间的切换以及游戏中的AI等等都涉及状态机。

    • 双缓冲模式

      在图形渲染中,要显示在屏幕上的图像信息存储在一个缓冲区中,如果使用单缓冲区渲染的话,因为逐行逐像素绘制,从而可能导致图像闪烁。双缓冲模式令缓冲保存着最终输出的图像,它会在屏幕上显示;而所有的的渲染指令都会在缓冲上绘制。当所有的渲染指令执行完毕后,交换前缓冲和后缓冲,这样图像就立即呈现出来,解决图像闪烁问题。

    • 对象池模式

      当需要使用某个对象时,从固定的池中重用对象,以提高性能和内存利用率。

      当需要频繁创建和销毁对象,每个对象创建和销毁的代价大,而且数据可重用时,考虑使用对象池来减少创建和销毁对象的开销。

    • 工厂模式

      定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类

    • 原型模式

      用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

    • 享元模式

      通过将对象数据切分成两种类型,然后在每个对象实例之间共享内部状态数据来节省内存。可以与工厂模式结合,创建并管理共享的享元对象。

    心得体会

    实际开发中,观察者模式可以进一步修改为发布/订阅模式,使得发布者可以发送消息到消息中心/事件中心,再由消息中心/事件中心调度转发给各个订阅者,发布者和订阅者间并无关联,以此实现模块与模块之间的解耦;对于频繁生成销毁的对象,用对象池收纳暂时不用的对象以供之后复用,以此减少开销;享元模式在图形渲染中可以在多个实例间共享一些相同的资源,如材质、着色器、模型等,以此提高性能。

    遵循基本的设计原则、合理巧妙地利用设计模式思想,可以让代码开发逻辑更清晰。

  • 相关阅读:
    SpringCloud(七)之SpringCloud的链路追踪组件Sleuth实战,以及 zipkin 的部署和使用
    java动态代理实现与原理详细分析
    Java中List, Integer[], int[]的相互转换
    Java并发编程:CountDownLatch、CyclicBarrier和 Semaphore
    lock wait timeout exceeded; try restarting transactio解决方案
    java命令--jstack 工具 查看JVM堆栈信息
    kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)
    Spring全局异常处理
    SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
    mysql函数之截取字符串
  • 原文地址:https://www.cnblogs.com/HDDDDDD/p/15968415.html
Copyright © 2020-2023  润新知