游戏中常用的设计模式

内容会持续更新,有错误的地方欢迎指正,谢谢!

设计模式存在的意义:大多数是为了保证“低耦合高内聚

1.单例模式

一个类只能有一个实例,单例非常重要经常用,比如游戏页面管理,现在我要关闭某个页面,页面上的很多子窗口也需要一起关闭。单例模式一般用于控制类脚本,也就是xxxController、xxxManager等。

//C#代码
public class Singleton 
{  
    //关键点0:构造函数是私有的,以防止对象通过构造函数被构造
    private Singleton() {}                     
    private static Singleton single = null;    //关键点1:声明单例对象是静态的
    private static object obj= new object();   //lock住引用对象obj才是互斥锁
    //静态方法内必须使用静态变量,所以上面两个变量要声明为静态的
    public static Singleton GetInstance()      //通过静态方法来构造对象
    {                        
         if (single == null)                   //关键点2:判断单例对象是否已经被构造
         {                             
            lock(obj)                          //关键点3:加线程锁
            {
               if(single == null)              //关键点4:二次判断单例是否已经被构造
               {
                  single = new Singleton();  
                }
             }
         }    
        return single;  
    }  
}

2.观察者模式

也就是发布—订阅者模式,常用于消息的分发,也就是说,发布者发布消息的话,全部订阅者可以同时收到消息。例子:玩家一旦升级,就需要同时更新很多信息,这时候就可以用观察者模式。

3.MVC模式

数据-控制-显示分离的方式 使游戏的结构清晰化,逻辑更明了。
控制器:(计算数据)处理和界面无关的代码逻辑,接受和处理网络数据。
模型:保存数据,发送数据更新信息。
视图:接受用户在界面上的操作,根据模型层的数据显示相应的界面。
控制器都是单例,模型就是数据,被控制器管理,而视图可由模型通过视图工厂来创建。
这里写图片描述

4.工厂模式

1.简单工厂模式:有一种swith—case的感觉,例子:给参数1就生产因特尔单核处理器,给参数2就生产AMD单核处理器。
这里写图片描述
2.工厂模式:加了一个单核处理器工厂类,生产哪种单核处理器,不再由参数决定,而是用户直接调用,例子:AMD单核处理器工厂类.生产单核处理器()
这里写图片描述
3.抽象工厂:也就是不仅生产单核处理器,还同时生产多核处理器。
举例:
AMD处理器工厂类名.生产单核处理器(),则生产AMD单核处理器;
AMD处理器工厂类名.生产多核处理器(),则生产AMD多核处理器;
这里写图片描述

抽象工厂模式在游戏中的实际应用:
假设有中文和英文两种语言,当用户更换语言时,会改变文字的显示和音效等组件。
具体情况:有一个语言父类,分别有中文和英文这两个子类;还有文字显示和音效这两个父类,其中,中文的文字显示类和英文的文字显示类分别继承自文字显示类,中文的音效类和英文的音效类分别继承音效类。调用方式举例:中文子类名.中文文字显示()。

5.中介者模式

这里写图片描述
各个子系统之间错中复杂的进行交互,使用中介者模式很好的避免了这种问题,也就是我们开发游戏的时候写的那个GameManager脚本的作用。
这里写图片描述
可将各个子系统类解耦,使得各个系统对象独立而易于复用,但中介者承担了较多的责任。

猜你喜欢

转载自blog.csdn.net/BillCYJ/article/details/79816418