Bootstrap

Unity游戏开发客户端面经——设计模式(初级)

前言:记录了总6w字的面经知识点,文章中的知识点若想深入了解,可以点击链接学习。由于文本太多,按类型分开。这一篇是 设计模式 常问问题总结,有帮助的可以收藏。


1. 面向对象设计原则:

    1. 单一职责原则

        一个类,最好只做一件事,只有一个引起它的变化。

    2. 开放封闭原则(开闭原则)

        对于扩展是开放的,对于更改是封闭的。

        为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键。

    3. 里氏替换原则

        子类对象能够替换程序中父类对象出现的任何地方,并且保证原来程序的逻辑行为不变及正确性不被破坏。

        里氏代换原则是实现开闭原则的重要方式之一,在运用里氏代换原则时,应该将父类设计为抽象类或者接口,让子类继承父类或实现父接口,并实现在父类中声明的方法,运行时,子类实例替换父类实例,可以很方便的扩展系统的功能,无须修改原有子类的代码,增加新的功能可以通过增加一个新的子类来实现。

    4. 依赖倒置原则

        抽象不应该依赖于细节,细节应当依赖于抽象。换句话说,要针对接口编程,而不是针对实现编程。

    5. 接口隔离原则

        使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些他不需要的接口。

    6. 合成复用原则

        尽量使用对象组合,而不是继承来达到复用的目的。

    7. 迪米特法则

        一个软件实体应当尽可能少地与其他实体发生相互作用。

        详细请看:【腾讯游戏面试题】面向对象的设计原则是什么? - 哔哩哔哩本文首发公众号洪流学堂。洪流学堂,让你快人几步。今天分享一个腾讯游戏的面试题:题目请说出面向对象的设计原则,并分别简述它们的含义。参考答案单一职责原则一个类只负责一个功能领域中的相应职责。或者说,一个类,应该只有一个引起它变化的原因。开闭原则一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。在定义中,软件实体可以指一个软件模块、一个由多个类组成的局部结构或一个独立的类。为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键。里氏替换原则所有引用icon-default.png?t=N7T8https://www.bilibili.com/read/cv10623181/

2. 工厂模式: (GameManager,UIManager)

        定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。这满足创建型模式中所要求的“创建与使用相分离”的特点。

        使用场景:比如说写技能是一系列类,那么就可以使用工厂模式创建。

                          游戏场景转换;角色AI状态管理。

3. 观察者模式  (服务器与客户端之间的通信)

        观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知,并自动更新。

        类似于邮件订阅和RSS订阅,当我们浏览一些博客或wiki时,经常会看到RSS图标,就这的意思是,当你订阅了该文章,如果后续有更新,会及时通知你。

        多用于角色血条值下降被改变(防御力、攻击力等)

4. 发布-订阅者模式(服务器与客户端之间的通信)

        是一种消息范式,消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(称为订阅者)。而是将发布的消息分为不同的类别,无需了解哪些订阅者(如果有的话)可能存在。同样的,订阅者可以表达对一个或多个类别的兴趣,只接收感兴趣的消息,无需了解哪些发布者存在。

        观察者模式 与 发布/订阅者模式 的区别区别:

        在观察者模式中,观察者是知道Subject的,Subject一直保持对观察者进行记录。然而,在发布订阅模式中,发布者和订阅者不知道对方的存在。它们只有通过消息代理进行通信。

        观察者和被观察者,是松耦合的关系。发布订阅模式里,发布者和订阅者,不是松耦合,而是完全解耦的。观察者模式大多数时候是同步的,比如当事件触发,Subject就会去调用观察者的方法。而发布-订阅模式大多数时候是异步的(使用消息队列)。

;