.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#语言基础知识; 熟悉Windows API编程; 确认开发环境已经安装了以下库:System.Runtime.InteropServices和CoreAudioApi。 实现步骤 第一步:获取系统音量 使用CoreAudioA…

    C# 2023年6月7日
    00
  • docker部署Asp.net core应用的完整步骤

    Docker部署Asp.net Core应用的完整步骤 Docker是一种流行的容器化技术,可以帮助我们轻松地部署和管理应用程序。在本攻略中,我们将介绍如何使用Docker部署Asp.net Core应用程序,并提供两个示例说明。 准备工作 在使用Docker部署Asp.net Core应用程序之前,我们需要完成以下准备工作: 安装Docker。 我们需要在…

    C# 2023年5月16日
    00
  • C#实现的UDP收发请求工具类实例

    下面为您详细讲解如何实现“C#实现的UDP收发请求工具类实例”。 什么是UDP? UDP是一种无连接的传输协议,它不保证数据传输的可靠性,但是在实时传输和流媒体等领域得到了广泛应用。通过UDP传输数据时,数据包不可靠地从源端发送到目的地,不会进行确认、重传和拥塞控制等。 C#中的UDP实现 C#中提供了Socket类,可以用于创建UDP套接字和进行数据的收发…

    C# 2023年6月6日
    00
  • Asp.Net Cache缓存使用代码

    接下来我将为您讲解Asp.Net Cache缓存使用代码的完整攻略。 Asp.Net Cache缓存简介 首先,我们来了解一下Asp.Net Cache缓存。 缓存是一种常见的优化技术,通过将经常使用的数据缓存到内存中,以提高系统的性能和响应速度。而Asp.Net提供了一个Cache对象来实现缓存功能。 Asp.Net的Cache对象是一个全局对象,可以在所…

    C# 2023年5月31日
    00
  • 如何用C#创建用户自定义异常浅析

    如何用C#创建用户自定义异常浅析 什么是用户自定义异常? C#中,用户自定义异常是一种可以由程序员自己定义并抛出的异常类型。在程序中,如果发现了某个错误情况,可以通过自定义异常来更加精确地描述问题,并向上层抛出。这样,程序的处理逻辑和异常捕捉代码会变得更加简单明了。 如何创建用户自定义异常? 要创建一个用户自定义异常类型,首先需要继承自System.Exce…

    C# 2023年6月6日
    00
  • C#实现DataTable,List和Json转换的方法

    下面是详细讲解“C#实现DataTable,List和Json转换的方法”的完整攻略: 如何把DataTable转换成Json 我们可以使用Json.Net库来实现将DataTable转换成Json的功能。使用此库需要先安装Newtonsoft.Json NuGet Package。 以下示例展示了一种将DataTable转换成Json的方法: using …

    C# 2023年5月31日
    00
  • C#实现图形位置组合转换的方法

    C#实现图形位置组合转换的方法 在C#中,通过使用矩阵转换可以实现图形位置组合的转换。该方法包含两个部分:矩阵的生成和矩阵的应用。 矩阵的生成 通过创建Matrix类实例来生成矩阵,可以调用它的一些方法来定义矩阵,如平移、旋转和缩放等。以下是几个常用的矩阵生成方法: 平移矩阵 平移矩阵可以将图形向上或向下、向左或向右移动。可以使用Matrix类的Transl…

    C# 2023年6月8日
    00
  • C#中Lambda表达式的三种写法

    下面我将为你讲解C#中Lambda表达式的三种写法的完整攻略。 1. 简单Lambda表达式 在C#中,我们可以使用Lambda表达式来简化匿名方法的编写。Lambda表达式有三个部分组成:参数列表、箭头(Lambda符号)和Lambda方法体,在下面的例子中,我们使用Lambda表达式实现了一个简单的加法方法: int Add(int a, int b) …

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