返回

工厂模式

工厂模式简介

工厂模式简单来说是将所有需要创造的对象用一个对象去创造。 传入参数》》工厂类》》new出来对应的物体。 顾客需要食物时通过服务员告诉厨师,厨师再将食物做出来。 这里服务员担当工厂类的角色。

简单代码例子

  • 需要new的不同对象
public class Food
{
    public virtual void ShowMe()
    {

    }
}
public class TomatoFood : Food
{
    public override void ShowMe()
    {
        //base.ShowMe();
        //Print("TomatoFood");
    }
}
public class EggFood : Food
{
    public override void ShowMe()
    {
        //base.ShowMe();
        //Print("EggFood");
    }
}
  • 工厂类
public class TeachFactory
{
    public Food ShowFactory(string name)
    {
        if (name == "egg")
        {
            return new EggFood();
        }
        else if (name == "tomato")
        {
            return new TomatoFood();
        }
        else
        {
            return null;
        }
    }
}
  • 传入参数
public class Main
{
    public void MainShow()
    {
        TeachFactory teachFactory = new TeachFactory();
        Food tmpTood1 = teachFactory.ShowFactory("egg");
        tmpTood1.ShowMe();
        Food tmpTood2 = teachFactory.ShowFactory("tomato");
        tmpTood2.ShowMe();
    }
}

##Uinity实例

  • 加载图片精灵
  • 代码展示
   //图片组
    public void LoadSprite(string name)
    {
        allSprit = Resources.LoadAll(name);
    }
    //工厂类
    public GameObject GetSprite(int index)
    {
        GameObject tmpobj = new GameObject("tmpGame");
        Image tmpImag = tmpobj.AddComponent<Image>();
        tmpImag.sprite = allSprit[index] as Sprite;
        return tmpobj;
    }    

    int allIndex = 0;
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            allIndex++;
            GameObject tmpObj = GetSprite(allIndex % 10);
            //通过传入的图片Id,加载相对应的图片
            tmpObj.transform.parent = transform;
            tmpObj.transform.position = new Vector3(allIndex * 80, 20, 0);
        }
    }
Licensed under CC BY-NC-SA 4.0
0