1、单例模式:某个类只能有一个实例,单例非常重要,比如我需要管理游戏的UI,现在我要关闭某个页面,页面上可能打开很多子窗口也需要一起关闭,这时候用一个单例来统一管理就很好解决这个问题。单例模式一般都是xxxController、xxxManager等,可以这么写。
public abstract class SingleTon<T> where T : SingleTon<T>, new()
{
private static SingleTon<T> _instance = null;
public static SingleTon<T> Instance
{
get
{
if(_instance == null) _instance = new T();
return _instance;
}
}
public virtual void Init()
{
Debug.Log("Sington<T>...");
}
}
public class UIManager : SingleTon<UIManager>
{
//乱七八糟的东西
}
2、命令模式:命令模式就是将对象的状态和行为进行封装后按照一定的规则进行处理的模式。可以把行为的请求者和行为的实现者分开,比如现在需要在游戏中开启录制,则需要记录输入的指令,如果
行为的请求者和实现者紧耦合(按下按键就执行)是不利于实现录制的。这个模式的优点第一个是减低耦合度,比如上面这个例子。其次因为请求者和实现着分开,我们可以对请求的指令做很多操作,比如增加新的指令,修改指令等。我实际遇到的有个例子是模块之间的通讯,比如我的游戏有登录模块和网络模块,当登录模块收的登录信息时需要通过网络模块发送信息给服务器进行验证,如果直接调用网络模块的XXX函数,假设这个函数还没写甚至还没写网络模块,游戏就不能运行调试,这时候可以写一个模块管理器,如果需要调用另一个模块的函数,则通过发送一个消息给模块管理器来发送信息,如果模块不存在就缓存信息,等有的时候再发送过去。这属于静态解耦,就是编译上解耦,即使另一个模块还没有的时候也能运行。
3、观察者模式,对应的就是事件机制,通过添加监听者来获取状态变化。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性(本句来自百度百科)。用我自己的理解解释一下上面那句,使用观察者模式可以避免类之间的直接调用,减少耦合,就是说类A需要监听类B,但是即使类B不在,也是可以运行的。遇到的例子有下层和上层的通讯,框架在设计上是保持单向依赖的,即上层依赖下层,视图层从业务层获取数据,业务层依赖基础类库。但是下层也需要获得上层的状态变化,为了不违反单向依赖的原则就可以使用观察者模式监听上层来获取状态变化。
4、MVC模式:这个图是在某个博客偷的哈哈哈,谈谈我的理解就好
控制器:处理数据,计算数据
模型:存储数据,可以说是一个数据模型
视图:呈现Model的数据
在我遇到的情况中,控制器都是单例,模型就是数据,可能从工厂创建,然后给控制器管理,而视图对象可以由模型通过视图工厂来创建。
5、工厂模式:当一种类型需要经常被大量创建和销毁的时候,为了提高效率可以不销毁,而是先保存起来,等需要的时候再拿去用。以前我是通过获取特定脚本来管理对象,每次都要去getcomponent看看有没有对象脚本来确定是不是要由工厂管理,这样效率比较低。有了mvc模式,可以直接管理模型,销毁一个对象可以这样写。
xxxController中的ReleastInFactory(ModelA) { .....Factory.Instance.Release(ModelA);..... }
Factory中的Release(ModelA) { ...ModelA.Release()...Push(ModelA).. } //Push可以用字典分类型存吧,不写了
ModelA中的Release() { ......View.SetActive(false); ...... }
写错的地方求指点一下~