首页 >> 方法大全

简单工厂

2022-05-15 方法大全 217 作者:考证青年

什么是简单工厂模式

定义一个工厂类。工厂类可以根据输入参数返回不同对象的实例。创建的对象都有相同的父类或接口

由于工厂类使用静态方法来创建实例,所以简单的工厂也可以称为静态工厂。虽然不属于 23 种设计模式方法方法,但作为一种对象创建设计模式,它可以作为其他工厂模式的基础。

为什么要使用工厂模式

工厂模式将类的实例化过程抽象化,将对象的使用和创建分离,对用户隐藏类实例创建的细节。类的具体创建过程的变化不会影响类的使用,在一定程度上提高了代码的复用性。

如何实现简单的工厂组合

简单工厂由三部分组成:

工厂类:简单工厂的核心,负责创建所有产品的抽象产品:封装各种产品的公共方法具体产品:继承自抽象产品类,实现抽象产品UML类图中声明的方法

简单工厂.png

实现一个简单的工厂抽象产品

public abstract class Product
{
    protected string Name;
    protected Product(string name)
    {
        Name = name;
    }
    public abstract string IntroductProduct();
}
复制代码

具体产品

internal class ProductA : Product
{
    public ProductA(string name) : base(name)
    {
    }
    public override string IntroductProduct()
    {
        return $"这是产品{Name}";
    }
}
internal class ProductB : Product
{
    public ProductB(string name) : base(name)
    {
    }
    public override string IntroductProduct()
    {
        return $"这是产品{Name}";
    }
}
复制代码

创建实例的工厂

public class ProductFactory
{
    public static Product CreateProduct(string productName)
    {
        return productName switch
        {
            nameof(ProductA) => new ProductA(productName),
            nameof(ProductB) => new ProductB(productName),
            _ => throw new ArgumentException(nameof(productName))
        };
    }
}
复制代码

客户端程序调用

public class Client
{
    public void ClientExecuteLogic()
    {
        var p1 = ProductFactory.CreateProduct(nameof(ProductA));
        Console.WriteLine(p1.IntroductProduct());
        var p2 = ProductFactory.CreateProduct(nameof(ProductB));
        Console.WriteLine(p2.IntroductProduct());
    }
}
复制代码

输出结果

Snipaste_2022-05-14_23-24-22.png

总结优缺点使用场景

从优缺点不难看出,简单的工厂适合创建较少的对象,而创建过多的对象会增加工厂类的逻辑复杂度

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了