unity设计模式摘要

设计模式

设计模式就是设计原则使用的模板,就相当于作文模板,背就行了!

  1. 单例模式 :就是一个类只能实例化一次,就是用static来进行约束。在普通的编程中,new 就是实例化,unity编程中不能new,但是拖拽上面板就是实例化。
    单例模式有继承自MonoBehaviour和非继承的,其中继承MonoBehaviour的,使用单例模式就是使用在某某项目的管理者上,例如GameManager上,而非继承的,就直接使用一个模板

非继承单例模式模板如下:
Public class TestSinglTwo
{
Private static TestSinglTwo instance;
public static TestSinglTwo Instance()
{
get{
If(instance==NULL)
instance=new TestSinglTwo();
return instance;
}
}
}

2.工厂模式
使用工厂模式就是让别人不用知道其中的具体实现过程,只需要输入几个参数就能直接调用并实现该功能。比如那些库,就是一个个工厂。
工厂模式的作用就是用来new一些物体。
主要原则,就是让你或者是他人使用的时候更加方便,尽量的减少调用时的代码量

3.在游戏开发中观察者模式就是不断的被访问,是否达到了条件。比如在要使用了一个大招,在播放过程中,0.5s之后想要添加一个音效,就需要在Update中写上一个计时器,而在Update中会每一帧是访问判断是否执行,这就是unity中的观察者模式。
自己的理解就是被观察者会被一直观察着,直到被观察者发出调用观察者的信息的时候,观察者就会根据发送的信息来进行实现功能。

4.在游戏开发中,代理模式则是使用一个代理者,使用代理者去访问一个方法。在从c#中表现为其中的委托delegate(单词意思代表)。其中的区别是delegate使用过的是堆空间,直接调用使用的是栈空间。有点类似于c语言中的指向函数指针,如果你要调用通过一个类调用另一个类里面的方法除了在类里面引用他,还可以通过委托来调用他。

5.策略者模式,策略者模式其实运用的就是面向对象语言的多态性,通过不同的输入得到不同的结果。如下图就是一个关于公司算税率的策略者模式示意图,实现方法就是先构建一个基类,再通过两个子类重写基类的税率方法。然后在会计类中传入基类,通过调用子类来得到该有的输出。
下面的是示意图:

代码:public class TaxBase//税款基类
{
public float payMoney;
Public virtual void CaculateTax()
{
}
}
public class TaxPreson:TaxBase//个人
{
Public override void CaculateTax()//重写
{
payMoney
=0.5f;
}
}
public class TaxCompany:TaxBase//公司
{
Public override void CaculateTax()//重写
{
payMoney
=0.3f;
}
}
Public void CaculateTax(TaxBase tempTax)
{
tempTax.CaculateTax();
}

调用方法就是:CaculateTax(TaxPerson one);CaculateTax(TaxCompany one);记得调用前要new一下。**
以下是策略模式在迅雷上的运用:

6.建造者模式
就是一层一层的往下调用,只有最上层的才是对外的接口:比如下面的UI框架,其中就会有一个UIManager会管理下面的函数,如果其他的对象想要调用其中的方法,就得通过这个UIManager。而单例模式一般都是用着UIManager上的。因为全局变量的位置一般都很少,所以我们要尽量的减少申请的全局变量数量。

7.中介者模式
就通过一个中介者来实现两个类的之间的直接调用,就是通过第三方平台进项恰接。这是一个降低高耦合的好办法。此中介者就是经常发生变化的逻辑层,而那两个类一般都是不发生改变的,即使发生改变也不会影响比别人,形式如下面的那个租房中介:

8.门面模式
就是将不同类型的物体组合在一起形成特定的功能。

Public GameObject redButton;//红色按钮
Public GameObject greenButton;//绿色按钮
Public void red()//显示红色
{
redButton.SetActive(false);
greenButton.SetActive(true);
}
Public void green()//显示绿色
{
redButton.SetActive(false);
greenButton.SetActive(true);
}
Bool Isreding=false;//状态
Public void OnClick()//点击事件,组合的步骤,逻辑层,可以一般不改动
{
Isreding=!Isreding;
if(Isreding)
{
red();
}
else
{
green();
}
}

9.组合模式
就是将相同类型的物体组合在一起形成特有的功能。
实现方式就是建立一个基类,让代表不同部分的类继承基类,然后建立一个List<基类>,之后将各个子类添加进列表,在通过父类的指针指向子类,来实现子类的调用。
比如一个坦克拥有引擎和炮台,然后引擎和炮台前进的方式有所不同,但是他们却要一起前进。
大体代码如下:
Public class TankBase//坦克基类
{
Public virtual Walk()//行走
{
}
}
Public class TankEngine:TankBase//坦克引擎
{
Public override Walk()
{
engineWalk();//引擎行走
}
}
Public class Bullte:TankBase//坦克炮台
{
Public class override Walk()
{
bullteWalk();炮台行走
}
}
Void main()
{
List tank= new List();//建立一个基类列表
Bullte _bullte= new bullte();
TankEngine engine=new TankEngine();
tank.Add(_bullte);
tank.Add(engine);
For(int i=0;i {
Tank[i].Walk();
}
}

还有一个状态模式,也就是有限状态机,还没有学。学了再记录吧!

你可能感兴趣的:(unity)