千锋教育-做有情怀、有良心、有品质的职业教育机构

当前位置:首页  >  IT面试题  >  Unity面试题  >  正文

unity面试题:用过哪些设计模式

来源:千锋教育
作者:wjy
关键词: 大连 广州
2022-09-27
分享

  用过哪些设计模式? 谈谈自己比较熟悉的设计模式

  链接: 学习资料网站.

  创建型:工厂方法、抽象工厂、单例、原型、生成器

  结构型:代理、外观、组合、适配器、装饰、桥接、享元

  行为:迭代器、中介者、观察者、策略、状态、命令、访问者、模板方法、备忘录、责任链

  1)工厂方法模式 面试题

  在父类中提供一个创建对象的方法,在其子类中决定实例化对象的类型。

  优点:单一职责,开闭,里氏替换LSP,依赖抽象DIP,迪米特法则DP

  缺点:每一次增加一个具体产品,都需要增加一个具体类和对应的具体工厂,代码复杂度就成倍增加,增加了系统具体类的依赖。

  学习链接: 工厂方法模式.

用过哪些设计模式

  2)抽象工厂模式:创建一系列相关的对象,而无需指定具体类。简记超级工厂创建其它工厂。

  优点:单一职责、开闭、LSP、DIP、DP

  缺点:引入众多接口和类,代码复杂度增加

  抽象工厂通常基于一组工厂方法

  3)单例模式 【面试题】

  保证一个类只有一个实例,并提供一个访问实例的全局节点。

  单例 (Singleton) 类声明了一个名为 get­Instance获取实例的静态方法来返回其所属类的一个相同实例。

  单例的构造函数必须对客户端 (Client) 代码隐藏。 调用获取实例方法必须是获取单例对象的唯一方式。

  优点:解决了2个问题

  缺点:违反单一职责原则,开闭原则。

  Unity中的单例模式和不继承MonoBehaviord的普通单例模式。

  应用例子:游戏中各种各样的管理器Manager

  隐藏游戏体:obj.hideFlags = HideFlags.HideAndDontSave

  链接: 我的两种单例模式代码.

  4)状态模式 面试题

  是一种行为设计模式,在对象的内部发生状态改变时改变其行为

  解决大量if else 或者switch 多状态的情形

  代码结构

  客户端:新建具体状态,并且调用具体行为

  状态控制器:状态属性,转换状态方法,调用状态的具体行为

  状态父类或接口:控制器属性,设置控制器方法(保存控制器),抽象行为

  具体状态:继承状态,重写为具体行为

  链接: 参考资料代码.

  优点:单一、开闭、控制器和父类状态封装,只需要注重具体状态类行为修改。易于维护和扩展、减少因新增状态对原因脚本进行大量修改,每个状态只需要维护自己,多项目开发、易于维护

  缺点:状态较少的情况下就小题大做

  举个例子:场景状态,主场景状态,加载场景状态,战斗场景状态,3个场景的切换

  5)观察者模式 【面试题】

  是一种行为设计模式,允许你定义一种订阅通知机制

  代码结构

  发布者:当新事件发生后,向其他对象发送自己所订阅的事件,发送通知方法。

  订阅者接口:声明了通知方法Update更新

  具体订阅者:可以执行一些操作来响应发布者的消息。

  客户端:分别创建发布者和订阅者对象,然后为订阅者注册发布者更新

  优点:开闭,迪米特法则,建立对象之间联系,数据松耦合

  缺点:通知顺序是随机的

  中介者和观察者相似

  6)中介者模式

  是一种行为设计模式,减少对象之间混乱无序的依赖关系,对象之间通过中介者对象进行合作。现实世界:飞机塔台调度

  代码结构

  N个组件:各种包含业务逻辑的类

  中介者接口:接口申明了与组件的交流方式,通知

  具体中介者:封装了多种组件间的关系。

  组件并不知道其它组件的情况,组件如果发生变化,通知中介者,然后判断并发送给相应的其它组件。接受者和发送者不知道谁来处理请求和谁发出的请求

  优点:单一、开闭、减少个组件的依赖关系,复用各个组件

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

相关推荐

  • 说出几种面向对象的设计原则 4、接口隔离原则ISP(Interface Segregation Principle)  使用多个隔离的接口,比使用单个接口要好。6、合成复用原则CRP(Composite Reuse Principle)  合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承。
  • unity面试题:用过哪些设计模式 易于维护和扩展、减少因新增状态对原因脚本进行大量修改,每个状态只需要维护自己,多项目开发、易于维护  缺点:状态较少的情况下就小题大做  举个例子:场景状态,主场景状态,加载场景状态,战斗场景状态,3个场景的切换  5)观察者模式 【面试题】  是一种行为设计模式...
  • UnityAction和UnityFunc的区别 UnityAction本质上就是委托,带泛型参数最多4个,且没有返回值的方法  Action  UnityFunc本质上也是委托,带泛型参数最多4个,可以有返回值的方法  Func  Action和Func的重要区别:  Action只用于没有返回值的方法,Fu...
  • 【重点unity面试题】泛型是什么 【重点面试题】泛型是什么  多个代码对 【不同数据类型】 执行 【相同指令】的情况  泛型:多个类型共享一组代码  泛型允许类型参数化,泛型类型是类型的模板  5种泛型:类、结构、接口、委托、方法  类型占位符 T 来表示泛型  泛型类不是实际的类,而是类的模...
  • unit面试题:For,foreach,Enumerator,MoveNext的使用 MoveNext通过迭代进行遍历  内存消耗本质没有多少区别  迭代器有一个状态机  before  running:yield return 或 yield break 或迭代结束  after  2、函数中多次使用string的+=处理,会产生大量内存垃圾...
  • unity游戏开发面试题:C# 委托delegate:unity事件与委托密切相关,回调机制,减少对象之间数据交互  接口interface:多人协作,完全抽象,类单继承  委托是约束方法的集合  接口是约束类具备的功能集合,解决类单继承问题  4、C#中unsafe关键字是用来做什么的?