一、工厂方法模式(Factory Method)
- 定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类
- 理解:通过定义抽象工厂父类来定义创建对象的公共接口,子类来决定生成的具体对象(即由子类来决定应该创建哪一个类)
二、工厂方法模式UML图
三、代码实现
工厂类
public class OperationFactory
{
public static Operation createOperate(string operate)
{
Operation oper = null;
switch (operate)
{
case "+":
oper = new OperationAdd();
break;
case "-":
oper = new OperationSub();
break;
case "*":
oper = new OperationMul();
break;
case "/":
oper = new OperationDiv();
break;
}
return oper;
}
}
构建工厂接口
interface IFactory
{
Operation CreatOperation();
}
//加减乘除各键一个具体工厂去实现这个接口
class AddFacroty : IFactory
{
public Operation CreateOperation()
{
return new OperationAdd();
}
}
加减乘除各建一个具体工厂去实现接口
class AddFacroty : IFactory
{
public Operation CreateOperation()
{
return new OperationAdd();
}
}
class SubFacroty : IFactory
{
public Operation CreateOperation()
{
return new OperationSub();
}
}
class MulFacroty : IFactory
{
public Operation CreateOperation()
{
return new OperationMul();
}
}
class DivFacroty : IFactory
{
public Operation CreateOperation()
{
return new OperationDiv();
}
}
客户端代码
IFactory operFactory = new AddFactory();
Operation oper = operFactory.CreateOperation();
oper.Number=1;
oper.Number=2;
double result = oper.GetResult();
四、工厂方法和简单工厂
1.简单工厂一旦添加一个新的功能就需要修改之前类的方法逻辑,违背了开放-封闭原则(即简单工厂模式的缺点),所以工厂方法就来了
2.工厂方法能解决简单工厂问题,因为工厂方法模式是把具体需要创建哪个类交给抽象工厂中的子类来决定的,工厂类不在负责所有产品的创建,只是给出了必须实现的接口,这样在工厂方法模式中添加新功能的时候就不需要修改类的逻辑,直接添加新的工厂子类就可以了,符合了开放-封闭原则