C#设计模式——(创建型-简单工厂设计模式)

2022-09-27 11:39:18 浏览数 (1)

一、定义

  • 简单工厂设计模式,又称静态工厂方法,不属于23中设计模式。
  • 是由工厂决定创建出哪一种产品类的实例,是工厂模式家族中最简单的模式。

二、代码展示

计算机的加减乘除

代码语言:javascript复制
public interface ICalculator  
{
    public double GetResult(double d1,double d2);
}
public class Add:ICalculator  
{
    public double GetResult(double d1,double d2)
    {
        return d1 d2;
    }
}
public class Sub:ICalculator  
{
    public double GetResult(double d1,double d2)
    {
        return d1-d2;
    }
}
public class Mul:ICalculator  
{
    public double GetResult(double d1,double d2)
    {
        return d1*d2;
    }
}
public class Div:ICalculator  
{
    public double GetResult(double d1,double d2)
    {
        return d1/d2;
    }
}
代码语言:javascript复制
publci static void Main(string[]args)
{
    Console.WriteLine("请输入操作数1");
    double d1=Convert.Todouble(Console.ReadLine());
    Console.WriteLine("请输入操作数2");
    double d2=Convert.Todouble(Console.ReadLine());
    Console.WriteLine("请输入操作符");
    string oper=Console.ReadLine();
    ICalculator cal=null;
    switch(oper)
    {
    case" ":
        cal=new Add();
        break;
      case"-":
        cal=new Sub();
        break;
      case"*":
        cal=new Mul();
        break;
      case"/":
        cal=new Div();
        break;      
    }
    double ret=cal.GetResult(d1,d2);
    Console.ReadKey();
    //静态工厂方法,把创建对象的过程封装到静态方法中,在客户端直接调用方法,实现客户端和创建对象的解耦,明确职责
}

三、静态工厂方法代码

代码语言:javascript复制
//静态工厂方法,把创建对象的过程封装到静态方法中,在客户端直接调用方法,实现客户端和创建对象的解耦,明确职责
public class CalFactory
{
    public static ICalculator(string oper)
    {
    ICalculator cal=null;
    switch(oper)
    {
    case" ":
        cal=new Add();
        break;
      case"-":
        cal=new Sub();
        break;
      case"*":
        cal=new Mul();
        break;
      case"/":
        cal=new Div();
        break;      
    }
    }
}

四、简单工厂模式的优缺点

  • 优点

1、简单工厂模式解决了客户端直接依赖于具体对象的问题,客户端消除了创建对象的责任,仅仅承担使用的责任。实现了责任的分割

2、简单工厂也实现了代码复用。

  • 缺点

1、系统扩展困难,一旦加入新功能,就必须修改工厂逻辑;

2、简单工厂集合了所有创建对象的逻辑,一旦不能正常工作,会导致整个系统出现问题。


老赵Net学习笔记

0 人点赞