工厂模式:实质是由一个工厂类根据传入的参数,动态决定创建哪一类产品,也就是创建哪一个类的实例,一个类代表一个产品
工厂模式有如下3个角色:
1.工厂:工厂类可以直接被外界调用,创建所需要的产品
2.抽象:一般是具体产品的父类
3.具体产品:工厂模式的创建目标,继承自抽象的子类
C#经常使用反射来实现工厂模式,因为反射可以动态地创建类型的实例
下面是一个简单工厂模式(使用反射)的代码:
using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace Factory { class Program { static void Main(string[] args) { //使用工厂方法创建实例 Icar name1 = myfactory.getcar("Factory.fengtian"); name1.makecar(); Icar name2 = myfactory.getcar("Factory.Dazhong");//忽略了大小写“Dazhong” name2.makecar(); } } public class myfactory//工厂:使用反射动态创建类型的实例 { public static Icar getcar(string name) { Icar car = (Icar)Assembly.Load("Factory").CreateInstance(name, true);//Load表示加载程序集,CreateInstance表示查找指定的类型并创建实例,第一个参数表示指定的类型名,第二个参数表示忽略大小写 return car; } } public interface Icar//抽象 { void makecar(); } public class fengtian : Icar//产品 { public void makecar() { Console.WriteLine("已生产一辆丰田汽车!"); } } public class dazhong : Icar//产品 { public void makecar() { Console.WriteLine("已生产一辆大众汽车!"); } } }