设计模式(2)工厂模式、工厂方法模式、抽象工厂模式

时间:2021-01-13 20:31:53
  1. 工厂模式
    一个工厂可以生产不同型号的产品,客户需告诉工厂需要什么型号的产品
    设计模式(2)工厂模式、工厂方法模式、抽象工厂模式
    代码:
public abstract BaseOperate
{
public double NumberA{get;set;}
public double NumberB{get;set;}
public abstract double GetResult();
}

public class AddOperate:BaseOperate
{
public override double GetResult()
{
return NumberA+NumberB;
}
}

public class MinusOperate:BaseOperate
{
public override double GetResult()
{
return NumberA-NumberB;
}
}

......

public class OperateFactory
{
public BaseOperate CreateOperation(string operateName)
{
switch(operateName)
{
case "Add":return new AddOperate();
case "Minus":return new MinusOperate();

......

}
}
}

简单工厂违背了开放封闭原则,在新增功能时,需要修改工厂,这样不是一个好事情。工厂方法模式解决了这个问题。

  1. 工厂方法模式
    有多个工厂,每个工厂生产一种型号的产品,客户需到不同工厂
    设计模式(2)工厂模式、工厂方法模式、抽象工厂模式
    方法类与上面一致,将原有的一个工厂拆分成多个工厂,有多少个产品就有多少个工厂
    代码:
public Interface IFactory
{
BaseOperate CreateOperation();
}

public AddFactory:IFactory
{
public BaseOperate CreateOperation()
{
return new AddOperate();
}
}

public MinusFactory:IFactory
{
public BaseOperate CreateOperation()
{
return new MinusOperate();
}
}

......

static void main(string[] agrs)
{
IFactory factory=new AddFactory();
BaseOperate opt =factory.CreateOperation();
opt.GetResult();
}

在工厂方法中出现一个问题,一个工厂只能生产一个产品,但是我们经常是要在一个工厂生产一个产品的不同型号产品。接下来通过抽象工厂模式来解决这个问题。

  1. 抽象工厂模式
    有多个工厂,每个工厂生产一种产品的多种型号的多个产品
    设计模式(2)工厂模式、工厂方法模式、抽象工厂模式
    代码:
public  IUser
{

}