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; }}
阅读全文
0 0
- C# 简单工厂模式
- C#简单工厂模式
- 简单工厂模式c#
- C# 简单工厂模式
- C#简单工厂模式
- C#工厂模式-简单工厂模式
- c#设计模式-简单工厂
- C#之简单工厂模式
- C# 简单工厂设计模式
- C#简单工厂设计模式
- C#设计模式--简单工厂
- C#实现简单工厂模式
- C#设计模式之简单工厂模式
- c#设计模式之简单工厂模式
- c#设计模式--简单工厂模式
- 设计模式之C#简单工厂模式
- C#设计模式之简单工厂模式
- C#设计模式(2)简单工厂模式
- 在Linux里设置用户环境变量的方法
- Selenium TestNG Java环境搭建过程中所遇问题汇总
- 欢迎使用CSDN-markdown编辑器
- MyCat介绍与配置
- Java中栈的实现原理
- C#简单工厂模式
- 《Angular与primeNG结合》
- Spring boot入门实例 简易登录(精通Spring+4.x++企业应用开发实战 学习笔记二)
- Linux下搭建Git服务器
- bzoj 4989: [Usaco2017 Feb]Why Did the Cow Cross the Road
- OpenCV·计算用时
- 4195: [Noi2015]程序自动分析
- php 保留字段小数点后两位小数
- Maven高度自动化构建项目的过程(二)