工厂方法模式
优点:
1 可扩展 ,加入新产品时,无需对原代码进行修改,只需在项目空间中添加实现接口的类即可
2 工厂可以自主设计产品,并且如何创建产品的细节全部在工厂内部,也叫多态工厂模式
3 包含抽象产品,具体产品 ,抽象工厂,具体工厂
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using System.Reflection;
namespace FactoryMothod
{
//抽象产品
interface product
{
void MethodSame();
void MethodDisplay();
}
//具体产品A
class ConcreatemethodA: product
{
public void MethodSame()
{
Console.WriteLine("MethodSameA");
}
public void MethodDisplay()
{
Console.WriteLine("MethodDisplayA");
}
}
//具体产品B
class ConcreatemethodB : product
{
public void MethodSame()
{
Console.WriteLine("MethodSameB");
}
public void MethodDisplay()
{
Console.WriteLine("MethodDisplayB");
}
}
//抽象工厂
interface Factory
{
product GetProduct();
}
//具体工厂A
class ConcreateFactoryA: Factory
{
public product GetProduct()
{
product product = null;
product = new ConcreatemethodA();
return product;
}
}
//具体工厂B
class ConcreateFactoryB : Factory
{
public product GetProduct()
{
product product = null;
product = new ConcreatemethodB();
return product;
}
}
class Program
{
static void Main(string[] args)
{
Factory factory;
product product;
//读取配置文件
string FactoryName = ConfigurationManager.AppSettings["FactoryName"];
//反射生成对象
object obj = Assembly.Load("FactoryMothod").CreateInstance(FactoryName);
factory = obj as Factory;
product = factory.GetProduct();
product.MethodSame();
product.MethodDisplay();
Console.ReadKey();
}
}
}
配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="FactoryName" value="FactoryMothod.ConcreateFactoryA"/>
</appSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
</configuration>
反射使用
object obj = Assmbly.load(“程序集名”).CreateInstance("程序集名.类“);