using System;
using System.Reflection;
namespace Reflex.factory
{
class Program
{
static void Main(string[] args)
{
//普通工厂
Ikess fk1 = FactoryManage.fnGetIkess("kess");
fk1.write();
Ikess fk2 = FactoryManage.fnGetIkess("kess2");
fk2.write();
Ikess fk3 = FactoryManage.fnGetIkess("kess3");
fk3.write();
//反射工厂
string mNamespace = "Reflex.factory";
Ikess k1 = ReflexFactoryManage.fnGetIkess(mNamespace,"kess");
k1.write();
Ikess k2 = ReflexFactoryManage.fnGetIkess(mNamespace, "kess2");
k2.write();
Ikess k3 = ReflexFactoryManage.fnGetIkess(mNamespace, "kess3");
k3.write();
ReflexFactoryManage fy = new ReflexFactoryManage(mNamespace);
Ikess k4 = fy.fnGetIkess("kess4");
k4.write();
Console.ReadKey();
}
}
/// <summary>
/// 普通工厂,需要修改
/// </summary>
internal class FactoryManage
{
internal static Ikess fnGetIkess(string mClassName)
{
///每次添加新类都要修改此处
switch (mClassName)
{
case "kess":
return new kess();
case "kess2":
return new kess2();
case "kess3":
return new kess3();
case "kess4":
return new kess4();
default:
throw new Exception("不存在此工厂");
}
}
}
/// <summary>
/// 反射工厂,不需要修改
/// </summary>
internal class ReflexFactoryManage
{
string mNamespace = "";
internal ReflexFactoryManage(string mNamespace)
{
this.mNamespace = mNamespace;
}
internal Ikess fnGetIkess(string mClassName)
{
return Assembly.Load(mNamespace).CreateInstance(mNamespace + "." + mClassName) as Ikess;
}
internal static Ikess fnGetIkess(string mNamespace, string mClassName)
{
return Assembly.Load(mNamespace).CreateInstance(mNamespace + "." + mClassName) as Ikess;
}
}
internal interface Ikess
{
void write();
}
internal class kess : Ikess
{
public void write()
{
Console.WriteLine("is kess");
}
}
internal class kess2 : Ikess
{
public void write()
{
Console.WriteLine("is kess2");
}
}
internal class kess3 : Ikess
{
public void write()
{
Console.WriteLine("is kess3");
}
}
internal class kess4 : Ikess
{
public void write()
{
Console.WriteLine("is kess4");
}
}
}
利用反射构造工厂
最新推荐文章于 2021-06-28 00:42:56 发布