.Net创建型设计模式之工厂方法模式(Factory Method)
工厂方法模式是一种常用的创建型设计模式。该模式通过定义一个抽象工厂方法来把实例的创建延迟到其子类。工厂方法模式中,客户端调用创建对象时只需使用工厂方法,而无需关心具体的对象是如何创建的。这样就可以将客户端代码与具体对象的创建和组装过程解耦。
使用场景
- 工厂方法模式适用于需要大量创建对象的场景,通过工厂方法可以统一管理和创建对象,提高代码的复用性和可维护性。
- 工厂方法模式适用于对多个相关的产品家族进行统一管理的场景,可以避免对象创造时出错,保证代码的健壮性和可维护性。
示例说明
示例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
抽象类和两个具体类 Circle
和 Rectangle
。同时,我们还实现了一个 ShapeFactory
抽象类以及两个实现类 CircleFactory
和 RectangleFactory
。客户端只需要使用 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
接口和两个实现类 ConsoleLogger
和 FileLogger
。同时,我们还实现了一个 ILoggerFactory
接口以及两个实现类 ConsoleLoggerFactory
和 FileLoggerFactory
。客户端只需要使用 ILoggerFactory
的方法 CreateLogger
就可以创建一个具体的 ILogger
对象,无需关心具体对象是如何创建的。这样,我们就可以对 ILogger
的具体实现进行统一管理,方便后续的扩展和维护。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.Net创建型设计模式之工厂方法模式(Factory Method) - Python技术站