.Net创建型设计模式之工厂方法模式(Factory Method)

.Net创建型设计模式之工厂方法模式(Factory Method)

工厂方法模式是一种常用的创建型设计模式。该模式通过定义一个抽象工厂方法来把实例的创建延迟到其子类。工厂方法模式中,客户端调用创建对象时只需使用工厂方法,而无需关心具体的对象是如何创建的。这样就可以将客户端代码与具体对象的创建和组装过程解耦。

使用场景

  1. 工厂方法模式适用于需要大量创建对象的场景,通过工厂方法可以统一管理和创建对象,提高代码的复用性和可维护性。
  2. 工厂方法模式适用于对多个相关的产品家族进行统一管理的场景,可以避免对象创造时出错,保证代码的健壮性和可维护性。

示例说明

示例1

public abstract class Shape
{
    public abstract void Draw();
}

public class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Draw Circle");
    }
}

public class Rectangle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Draw Rectangle");
    }
}

public abstract class ShapeFactory
{
    public abstract Shape CreateShape();
}

public class CircleFactory : ShapeFactory
{
    public override Shape CreateShape()
    {
        return new Circle();
    }
}

public class RectangleFactory : ShapeFactory
{
    public override Shape CreateShape()
    {
        return new Rectangle();
    }
}

//-------------客户端代码---------------------

//使用工厂方法创建Circle对象
ShapeFactory circleFactory = new CircleFactory();
Shape circle = circleFactory.CreateShape();
circle.Draw();

//使用工厂方法创建Rectangle对象
ShapeFactory rectangleFactory = new RectangleFactory();
Shape rectangle = rectangleFactory.CreateShape();
rectangle.Draw();

这个示例中,我们实现了一个 Shape 抽象类和两个具体类 CircleRectangle。同时,我们还实现了一个 ShapeFactory 抽象类以及两个实现类 CircleFactoryRectangleFactory。客户端只需要使用 ShapeFactory 的方法 CreateShape 就可以创建一个具体的 Shape 对象,无需关心具体对象是如何创建的。

示例2

public interface ILogger
{
    void Log(string message);
}

public class ConsoleLogger : ILogger
{
    public void Log(string message)
    {
        Console.WriteLine($"Log to Console: {message}");
    }
}

public class FileLogger : ILogger
{
    public void Log(string message)
    {
        Console.WriteLine($"Log to File: {message}");
    }
}

public interface ILoggerFactory
{
    ILogger CreateLogger();
}

public class ConsoleLoggerFactory : ILoggerFactory
{
    public ILogger CreateLogger()
    {
        return new ConsoleLogger();
    }
}

public class FileLoggerFactory : ILoggerFactory
{
    public ILogger CreateLogger()
    {
        return new FileLogger();
    }
}

//-------------客户端代码---------------------

//使用工厂方法创建ConsoleLogger对象
ILoggerFactory consoleLoggerFactory = new ConsoleLoggerFactory();
ILogger consoleLogger = consoleLoggerFactory.CreateLogger();
consoleLogger.Log("Hello, I'm a ConsoleLogger");

//使用工厂方法创建FileLogger对象
ILoggerFactory fileLoggerFactory = new FileLoggerFactory();
ILogger fileLogger = fileLoggerFactory.CreateLogger();
fileLogger.Log("Hello, I'm a FileLogger");

这个示例中,我们实现了一个 ILogger 接口和两个实现类 ConsoleLoggerFileLogger。同时,我们还实现了一个 ILoggerFactory 接口以及两个实现类 ConsoleLoggerFactoryFileLoggerFactory。客户端只需要使用 ILoggerFactory 的方法 CreateLogger 就可以创建一个具体的 ILogger 对象,无需关心具体对象是如何创建的。这样,我们就可以对 ILogger 的具体实现进行统一管理,方便后续的扩展和维护。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.Net创建型设计模式之工厂方法模式(Factory Method) - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • 如何用C#获取计算机详细的软件和硬件信息

    当使用C#语言编写桌面应用程序时,有时需要获取计算机的详细软硬件信息,例如操作系统、处理器、内存、硬盘、显卡、声卡等信息。本文将为您提供一份完整攻略,介绍如何使用C#获取计算机的诸多硬件和软件信息。 第一步:导入必要的命名空间 首先,我们需要使用以下命名空间来访问相关API: using System.Management; //用于WMI操作 using …

    C# 2023年6月6日
    00
  • C#笔试题之同线程Lock语句递归不会死锁

    当同一线程中出现递归的Lock语句时,如果没有特殊的处理,就可能导致死锁。这是因为Lock语句在执行前会获取锁,并在执行完毕后释放锁,如果在获取锁之后又执行了同一个Lock语句,就会导致锁无法释放,进而导致死锁。 解决这个问题的方法是利用Monitor.Enter和Monitor.Exit方法,进行锁的操作。其中,Monitor.Enter方法获取锁,如果已…

    C# 2023年6月7日
    00
  • .Net Core中使用EFCore生成反向工程

    在 .NET Core 中,可以使用 Entity Framework Core (EF Core) 来生成反向工程。反向工程是指根据数据库中的表自动生成模型类和上下文类。以下是 .NET Core 中使用 EF Core 生成反向工程的完整攻略: 步骤一:安装 EF Core 工具 在使用 EF Core 生成反向工程前,需要在 .NET Core 项目中…

    C# 2023年5月17日
    00
  • C#查找对象在ArrayList中出现位置的方法

    Markdown格式说明: 标题使用#号进行标记 代码块使用“`标记开头和结尾 示例说明使用文本加代码块结合的方式 C#查找对象在ArrayList中出现位置的方法 在 C# 中,可以使用 ArrayList 类型来存储一些对象。有时候我们需要查找某个对象在 ArrayList 中出现的位置,这时候可以使用以下方法对 ArrayList 进行搜索: int…

    C# 2023年5月31日
    00
  • 运行Windows终端(PowerShell)提示由于找不到mscoree.dll无法继续执行代码

    当在Windows终端(PowerShell)中运行代码时,可能会遇到“找不到mscoree.dll”错误。这个错误通常是由于.NET Framework未正确安装或未正确注册所致。以下是解决此问题的完整攻略。 1. 确认.NET Framework已正确安装 首先,我们需要确认.NET Framework已正确安装。可以通过以下步骤检查: 打开“控制面板”…

    C# 2023年5月15日
    00
  • C#调用AForge实现摄像头录像的示例代码

    下面是C#调用AForge实现摄像头录像的完整攻略,分为以下几个步骤: 1. 引用 AForge 库 在 Visual Studio 中创建 C# 项目后,右键点击“引用”,选择“管理 NuGet 程序包”打开 NuGet 程序包管理器,搜索并安装 AForge 库。 2. 初始化摄像头设备 在 C# 代码中申明VideoCaptureDevice对象并初始…

    C# 2023年6月3日
    00
  • C#静态方法的使用

    下面是详细讲解 “C# 静态方法的使用” 的完整攻略。 什么是静态方法 在 C# 中,静态方法是一种只属于类的方法,而不属于类的任何实例(对象)。静态方法可以直接通过类名调用,不需要先实例化一个对象。因此,静态方法通常被用作工具方法,例如 Math 类中的 Pow() 方法。 怎样使用静态方法 使用静态方法的语法格式为: [访问修饰符] static 返回类…

    C# 2023年5月15日
    00
  • C# 4.0 大数的运算–BigInteger的应用详解

    C#4.0大数的运算–BigInteger的应用详解 对于C#中的int、long等整型变量来说,其取值范围是固定的。如果要进行大数运算,就需要使用BigInteger类。 1. BigInteger基础知识 BigInteger类是System.Numerics命名空间下的一个类,用于处理大整数。它支持基本的算术运算、转换和比较操作。BigInteger…

    C# 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部