反射工厂与泛型工厂
反射工厂:
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace 工厂模式
{
class Program
{
static void Main(string[] args)
{
交通工具 a = new 由工具类型产生工具(typeof(卡车));
a.创建交通工具();
交通工具 b = new 由工具类型产生工具(typeof(轿车));
b.创建交通工具();
Console.Read();
}
}
interface 交通工具
{
void 创建交通工具();
}
class 由工具类型产生工具 : 交通工具
{
Type 工具类型;
public 由工具类型产生工具(Type 工具类型)
{
this.工具类型 = 工具类型;
}
public void 创建交通工具()
{
object _obj = Activator.CreateInstance(工具类型);
}
}
class 卡车
{
public 卡车()
{
Console.WriteLine("卡车");
}
}
class 轿车
{
public 轿车()
{
Console.WriteLine("轿车");
}
}
}
重构为泛型工厂:using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace 工厂模式
{
class Program
{
static void Main(string[] args)
{
交通工具 a = new 由工具类型产生工具(typeof(卡车));
a.创建交通工具();
交通工具 b = new 由工具类型产生工具(typeof(轿车));
b.创建交通工具();
Console.Read();
}
}
interface 交通工具
{
void 创建交通工具();
}
class 由工具类型产生工具 : 交通工具
{
Type 工具类型;
public 由工具类型产生工具(Type 工具类型)
{
this.工具类型 = 工具类型;
}
public void 创建交通工具()
{
object _obj = Activator.CreateInstance(工具类型);
}
}
class 卡车
{
public 卡车()
{
Console.WriteLine("卡车");
}
}
class 轿车
{
public 轿车()
{
Console.WriteLine("轿车");
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
//using System.Reflection;
namespace 工厂模式
{
class Program
{
static void Main(string[] args)
{
交通工具 a = new 泛型工厂<卡车>();
a.创建交通工具();
交通工具 b = new 泛型工厂<轿车>();
b.创建交通工具();
Console.Read();
}
}
interface 交通工具
{
void 创建交通工具();
}
class 泛型工厂<工具类型> : 交通工具 where 工具类型: new()
{
public 泛型工厂()
{ }
public void 创建交通工具()
{
工具类型 工具 = new 工具类型();
}
}
class 卡车
{
public 卡车()
{
Console.WriteLine("卡车");
}
}
class 轿车
{
public 轿车()
{
Console.WriteLine("轿车");
}
}
}
using System.Collections.Generic;
using System.Text;
//using System.Reflection;
namespace 工厂模式
{
class Program
{
static void Main(string[] args)
{
交通工具 a = new 泛型工厂<卡车>();
a.创建交通工具();
交通工具 b = new 泛型工厂<轿车>();
b.创建交通工具();
Console.Read();
}
}
interface 交通工具
{
void 创建交通工具();
}
class 泛型工厂<工具类型> : 交通工具 where 工具类型: new()
{
public 泛型工厂()
{ }
public void 创建交通工具()
{
工具类型 工具 = new 工具类型();
}
}
class 卡车
{
public 卡车()
{
Console.WriteLine("卡车");
}
}
class 轿车
{
public 轿车()
{
Console.WriteLine("轿车");
}
}
}