简单工厂模式

简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式。在简单工厂模式中,我们创建一个工厂类,这个类用于根据传入的信息动态决定应该创建哪一个类的实例。

以下是一个C#实现的简单工厂模式的例子。在这个例子中,我们将创建一个形状工厂,它能够基于传入的类型信息来创建不同类型的形状对象(如圆形、矩形等)。

首先,定义一个形状接口 IShape

public interface IShape  
{  
    void Draw();  
}

然后,创建实现该接口的具体类,例如 CircleRectangle

public class Circle : IShape  
{  
    public void Draw()  
    {  
        Console.WriteLine("Inside Circle::draw() method.");  
    }  
}  
  
public class Rectangle : IShape  
{  
    public void Draw()  
    {  
        Console.WriteLine("Inside Rectangle::draw() method.");  
    }  
}

接下来,创建简单工厂类 ShapeFactory,该类将包含静态方法来生成基于给定信息的形状对象:

public class ShapeFactory  
{  
    // 使用 getShape 方法获取形状类型的对象  
    public static IShape GetShape(string shapeType)  
    {  
        if (shapeType == null)  
        {  
            return null;  
        }  
  
        if (shapeType.ToLower() == "circle")  
        {  
            return new Circle();  
        }  
        else if (shapeType.ToLower() == "rectangle")  
        {  
            return new Rectangle();  
        }  
  
        // 可以使用异常处理或返回 null  
        throw new InvalidOperationException("Invalid shape type");  
    }  
}

最后,使用 ShapeFactory 来获取形状对象,并调用其 Draw 方法:

class Program  
{  
    static void Main(string[] args)  
    {  
        IShape shape1 = ShapeFactory.GetShape("CIRCLE");  
        shape1.Draw();  
  
        IShape shape2 = ShapeFactory.GetShape("RECTANGLE");  
        shape2.Draw();  
  
        // 尝试获取一个不支持的形状类型  
        try  
        {  
            IShape shape3 = ShapeFactory.GetShape("TRIANGLE");  
        }  
        catch (InvalidOperationException ex)  
        {  
            Console.WriteLine(ex.Message);  
        }  
  
        Console.ReadKey();  
    }  
}

在这个例子中,ShapeFactory 类是一个简单工厂,它根据传入的字符串来决定创建哪个形状对象。注意,简单工厂模式的一个主要缺点是,每当有新的形状类被添加到系统中时,ShapeFactory 类也需要被修改,这违反了开闭原则(对扩展开放,对修改关闭)。因此,在更复杂的系统中,可能会考虑使用其他设计模式(如工厂方法模式或抽象工厂模式)来替代简单工厂模式。

相关推荐

  1. 简单工厂模式

    2024-07-20 19:56:02       34 阅读
  2. 设计模式-简单工厂

    2024-07-20 19:56:02       24 阅读
  3. 简单工厂模式

    2024-07-20 19:56:02       20 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 19:56:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 19:56:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 19:56:02       45 阅读
  4. Python语言-面向对象

    2024-07-20 19:56:02       55 阅读

热门阅读

  1. MySQL基本语法规则 By 尚硅谷

    2024-07-20 19:56:02       16 阅读
  2. 一个线程进入线程池后的工作流程

    2024-07-20 19:56:02       16 阅读
  3. Redis 内部的字符串和字典

    2024-07-20 19:56:02       20 阅读
  4. cordova使用vue进行开发

    2024-07-20 19:56:02       20 阅读
  5. 千字长文讲解python闭包

    2024-07-20 19:56:02       17 阅读
  6. 网友提问:display:flex和display:box有什么区别?

    2024-07-20 19:56:02       16 阅读
  7. 每天一个数据分析题(四百三十八)- A/Btest

    2024-07-20 19:56:02       17 阅读
  8. 为了Python换源,我开发了一个库「pipco 0.0.19」

    2024-07-20 19:56:02       20 阅读
  9. Python3 第十九课 -- 迭代器与生成器

    2024-07-20 19:56:02       22 阅读
  10. SQL

    SQL

    2024-07-20 19:56:02      15 阅读
  11. python环境搭建步骤记录

    2024-07-20 19:56:02       18 阅读
  12. 【Linux常用命令】之sed命令

    2024-07-20 19:56:02       18 阅读