Unity面试题——设计模式相关

简介: Unity面试题——设计模式相关

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

1、工厂模式 2、代理模式 3、策略模式 4、观察者模式 6、单例模式

工厂模式:简单工厂模式解决的问题是如何去实例化一个合适的对象。

简单工厂模式的核心思想就是:有一个专门的类来负责创建实例的过程。凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。比如说写技能是一系列类,那么就可以使用工厂模式创建。

代理模式:一个是真正的你要访问的对象(目标类),一个是代理对象,真正对象与代理对象实现同一个接口,先访问代理类再访问真正要访问的对象。代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做,此处的代理就是这个意思。再如我们有的时候打官司,我们需要请律师,因为律师在法律方面有专长,可以替我们进行操作,表达我们的想法。

代理模式的应用场景:

如果已有的方法在使用的时候需要对原有的方法进行改进,此时有两种办法:

1、修改原有的方法来适应。这样违反了“对扩展开放,对修改关闭”的原则。

2、就是采用一个代理类调用原有的方法,且对产生的结果进行控制。这种方法就是代理模式。

使用代理模式,可以将功能划分的更加清晰,有助于后期维护!

其实,简单来讲就一句 使用算法的客户。策略模式的决定权在用户,系统本身提供不同算法的实现,新增或者删除算法,对各种算法做封装。因此,策略模式多用在算法决策系统中,外部用户只需要决定用哪个算法即可。

观察者模式很好理解,类似于邮件订阅和 RSS 订阅,当我们浏览一些博客或 wiki 时,经常会看到 RSS 标,就这的意思是,当你订阅了该文章,如果后续有更新,会及时通知你。其实,简单来讲就一句话:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。

单例对象(Singleton)是一种常用的设计模式。在 C#应用中,单例对象能保证在一个 CLR 中,该对象

只有一个实例存在。这样的模式有几个好处:

1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。

2、省去了 new 操作符,降低了系统内存的使用频率,减轻 GC 压力。

3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。

(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核

心交易服务器独立控制整个流程。

215. 请说出 4 种面向对象的设计原则,并分别简述它们的含义。

1) 单一职责原则 (The Single Responsiblity Principle,简称

SRP):一个类,最好只做一件事,只有一个引起它的变化.

2) 开放-封闭原则 (The Open-Close Principle,简称

OCP):对于扩展是开放的,对于更改是封闭的

3) Liskov 替换原则(The Liskov Substitution Principle,简称

LSP):子类必须能够替换其基类

4) 依赖倒置原则 (The Dependency Inversion Pricinple, 简称

DIP):依赖于抽象

5) 接口隔离原则 (The Interface Segregation Principle,简称

ISP):使用多个小的专门的接口,而不要使用一个大的总接口。

216. 设计一个状态机类型,状态值为 int 类型,要求:

拥有接口,获取当前状态,切换状态

外部可以监听状态切换事件,参数为切换前状态和切换后状态(使用 delete 和 event)//定义一个状态

public abstract class IAction{
public int StateName;
public IAction(int stateName) {
this.StateName = stateName;
}
public int GetState(){
return StateName;
}
public abstract bool CanGetIn();
public abstract void GetIn();
public abstract void GetOut();
public abstract void Update(float dt);
}
//定义一个状态切换事件
public abstract class IEvent {
public int code;
public IEvent(int code) {
this.code = code;
}
public int GetCode(){
return code;
}
//当前状态事件检测
public abstract bool Check();
}
public class AvatarStateMachine{
//初始化状态机public void InitStateMachine(){}
//注册一个状态
public void AddAction(int action) {}
//注册一个状态切换事件
public void AddEventTransition(int fromAction, int toAction, IEvent byEvent) {}
//更新当前状态,检测能否进入下一个状态
public void UpdateStateMachine(){}
//强行切换状态
public void SwitchTo(int toState) {}
}

217. 如何处理 unity 中界面资源,界面逻辑以及功能模块三者之间耦合关系

这就是在 Unity 使用 MVC 时通常将功能模块尽量脱离脱离 MonoBehavior,同一个模块内 M 只用来操

作数据并发送更新消息,V 只用来接受消息并控制界面显示跳转,使用 C 来处理界面与数据的频繁操

作。

218. 观察者模式的深入理解?

观察者模式:一对多的关系,当被观察这发生改变时会通知所有观察者。让双方都依赖于抽象,使得

各自变化不会影响另一方。

219. MVC 模式

用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和

个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

目录
相关文章
|
1月前
|
设计模式 缓存 Java
面试题:谈谈Spring用到了哪些设计模式?
面试题:谈谈Spring用到了哪些设计模式?
|
2月前
|
设计模式 安全 算法
【Java面试题汇总】设计模式篇(2023版)
谈谈你对设计模式的理解、七大原则、单例模式、工厂模式、代理模式、模板模式、观察者模式、JDK中用到的设计模式、Spring中用到的设计模式
【Java面试题汇总】设计模式篇(2023版)
|
3月前
|
设计模式 安全 图形学
Unity精华☀️ 面试官眼中的「设计模式」
Unity精华☀️ 面试官眼中的「设计模式」
|
3月前
|
设计模式 算法 Java
面试官:JDK中都用了哪些设计模式?
面试官:JDK中都用了哪些设计模式?
42 0
|
4月前
|
设计模式 安全 Java
Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
78 1
|
5月前
|
设计模式 开发框架 Java
java设计模式面试题大全含答案
java设计模式面试题大全含答案
|
4月前
|
设计模式 存储 缓存
Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
57 0
|
4月前
|
设计模式 缓存 安全
Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
41 0
|
4月前
|
设计模式 并行计算 安全
Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
50 0
|
4月前
|
设计模式 安全 Java
Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
108 0