简单工厂
优点:1 将对象创建者和对象使用者分开,降低耦合关系
2 无须修改主程序,可以在配置文件中修改参数
确定 :增加类数量,工厂扩展困难,增加产品工厂必须修改
```csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
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");
}
}
//工厂
class Factory
{
public static product GetProduct(string ProductName)
{
product product = null;
if (ProductName.Equals("ConcreatemethodA"))
product = new ConcreatemethodA();
else if (ProductName.Equals("ConcreatemethodB"))
product = new ConcreatemethodB();
return product;
}
}
//客户主程序
class Program
{
static void Main(string[] args)
{
product product;
//读取配置文件
string ProductName = ConfigurationManager.AppSettings["ProductName"];
product = Factory.GetProduct(ProductName);//通过静态工厂创建
product.MethodSame();
product.MethodDisplay();
Console.ReadKey();
}
}
}
配置文件内容如下
```csharp
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="ProductName" value="ConcreatemethodA"/>
</appSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
</configuration>
简单工厂和其他方法的比较
简单工厂,工厂静态固定只能生产对应的少数具体产品,不方便扩展发展。
工厂方法,抽象工厂类定义公共的一个生产产品的接口,通过继承工厂类,建立多个具体的工厂类和并且每个类实现具体的单一产品生产。
抽象工厂 ,抽象工厂类定义公共的一系列生产产品的接口,通过继承工厂类,建立单个具体工厂,实现生产多个产品。