C#简单工厂模式

来源:互联网 发布:淘宝详情页画布大小 编辑:程序博客网 时间:2024/06/06 10:49

首先解决的问题是代码可以低耦合。

先创建一个基类

public class RoleBase{     public string Name { get; set; }    public string Age { get; set; }}

在创建他的子类

public class Player : RoleBase{   public Player()    {        Debug.Log("玩家被创建了");    }}public class Monster : RoleBase{    public Monster()    {        Debug.Log("小怪被创建了");    }}public class Boss : RoleBase{     public Boss ()    {        Debug.Log("Boss被创建了");    }}

接下来介绍三种C#中工厂模式

第一种是根据字符串来创建

public static RoleBase CreateInstance(string roleName)    {        switch (roleName)        {            case "Player":                return new Player();                break;            case "Monster":                return new Player();                break;            case "Boss":                return new Player();                break;            default:                return null;        }    }

第二种使用反射进行创建

不过要导入名称空间using System;public static RoleBase CreateInstance(Type roleName)    {        //反射        RoleBase roleBase = Activator.CreateInstance(roleName) as RoleBase;        return roleBase;    }

第三种也是通过名称来创建,一样可以创建。

不过也要导入名称空间using System.Reflection;public static RoleBase CreateInstance(string roleName)    {        Assembly assemble = Assembly.GetExecutingAssembly();        RoleBase role = assemble.CreateInstance(roleName) as RoleBase;        return role;    }

在这里反射在游戏开中用的最多,也就是第二种。
以下是全部代码

using System.Collections;using System.Collections.Generic;using UnityEngine;using System;using System.Reflection;public class SimpleFactory : MonoBehaviour {    // Use this for initialization    void Start () {        //这是第一和第三的调用        Player player = SFactory.CreateInstance("Player") as Player;        //这是第二种的调用        Monster moster = SFactory.CreateInstance(typeof(Monster)) as Monster;    }}public class RoleBase{     public string Name { get; set; }    public string Age { get; set; }}public class Player : RoleBase{   public Player()    {        Debug.Log("玩家被创建了");    }}public class Monster : RoleBase{    public Monster()    {        Debug.Log("小怪被创建了");    }}public class Boss : RoleBase{}public class SFactory{    public static RoleBase CreateInstance(string roleName)    {        switch (roleName)        {            case "Player":                return new Player();                break;            case "Monster":                return new Player();                break;            case "Boss":                return new Player();                break;            default:                return null;        }    }    public static RoleBase CreateInstance(Type roleName)    {        //反射        RoleBase roleBase = Activator.CreateInstance(roleName) as RoleBase;        return roleBase;    }    public static RoleBase CreateInstance(string roleName)    {        Assembly assemble = Assembly.GetExecutingAssembly();        RoleBase role = assemble.CreateInstance(roleName) as RoleBase;        return role;    }}
原创粉丝点击