设计模式是什么???
在开发程序的过程中经常遇到一些典型的问题,在对这些问题进行处理解决的过程中,慢慢的整理出来一套系统的解决方案,这套方案就称之为“设计模式”
在开发过程中也会遇到很多针对性的问题,我们就可以学习前人总结好的各种各样的设计模式,来解决这些编程开发中的问题。
举个栗子:
玩王者荣耀的玩家都知道,在冒险模式的挑战中有个《血王宫回忆》关卡,保证孙膑,钟无艳不死通关,,这时网上就会有很多的 攻略,告诉我们用什么英雄,怎么玩,,,这时我们就可以过关了,这些攻略就可以看做事游戏中的设计模式!
单例设计模式:
什么是单例:
设计一个类的时候,需要保证整个程序在运行期间只存在一个实例对象,解决这个问题,我们需要用到“单例模式”,
注:单例模式是用于非静态类中的,在静态类中写单例无意义。
使用步骤:
1,声明一个静态且私有的当前类型的字段
2,创建私有无参的构造方法,保证外部无法实例化本类
3,创建一个静态类方法用于创建此类的唯一对象
在C#中使用的代码简例:
//通常用的类
using System;
namespace 设计模式_单例
{
class WebClass
{
private string webName;
private string webUrl;
public WebClass(string name, string url)
{
this.webName = name;
this.webUrl = url;
}
public void Show()
{
Console.WriteLine("{0}网站的URL是:{1}",webName,webUrl);
}
}
}
//使用单例的类
namespace 设计模式_单例
{
class DanliClass
{
//声明一个静态且私有的当前类型的字段
private static DanliClass _instance;
//创建私有构造方法,保证外界访问不到
private DanliClass() { }
//创建一个静态类方法用于创建此类的唯一对象
public static DanliClass _Instance()
{
//只有第一次执行的时候会新建对象
if (_instance == null)
{
_instance = new DanliClass();
}
return _instance;
}
}
}
/*随意创建对象在游戏开发中不但占用内存,还存在其他的缺点,(比如:对敌人血量的控制,不能子弹,大的时候是一个对象,手雷炸的时候也是个对象,这样肯定是不行的)*/
using System;
namespace 设计模式_单例
{
class Program
{
static void Main(string[] args)
{
//我们通常使用的对象 方式
WebClass web1 = new WebClass("CSDN", "www.blog.csdn.net");
web1.Show();
WebClass web2 = new WebClass("百度","www.baidu.com");
web2.Show();
Console.WriteLine("-------------------");
Console.WriteLine("单例模式");
//这样写就不行了
//DanliClass danli1 = new DanliClass();
DanliClass danli1 = DanliClass._Instance();
DanliClass danli2 = DanliClass._Instance();
Console.WriteLine("两个单例类对象是否是一个:"+danli1.Equals(danli2));
Console.ReadKey();
}
}
}
在Unity中使用单例的时候可以这样:
不挂载到游戏物体身上,做管理类时:
public class GameConfig {
//通过属性的方式访问
private static GameConfig _instance;
public static GameConfig Instance
{
get
{
if (_instance == null)
{
_instance = new GameConfig();
}
return _instance;
}
}
//下面写逻辑代码
}
挂载在游戏物体身上的时候这样:
public class GameConfig : MonoBehaviour {
public static GameConfig _Instance;
void Awake(){
if(_Instance== null){
_Instance= this;
}
}
注:一定不要在OnDestroy函数中直接访问单例模式!这样很有可能会造成单例无法销毁