C#:周黑鸭工厂的产品生产统一管理

本文介绍了如何使用C#通过定义接口IProductionFactory来管理周黑鸭工厂的生产过程,展示了接口在定义方法契约、实现多态性和提高代码可维护性上的作用,以及如何通过委托实现工厂方法的动态调用。
摘要由CSDN通过智能技术生成

目录


前言

本文通过使用 C# 编码,实现了对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。其中,武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。

一、定义接口

1、代码实现

通过定义接口IproductionFactory,约束和定义所有工厂类必须实现的方法,其中包括生产鸭脖(ProduceDuckNeck)和生产鸭翅(ProduceDuckWing)。

代码如下:

using System;

public interface IProductionFactory
{
    // 生产鸭脖的方法
    void ProduceDuckNeck();
    // 生产鸭翅的方法
    void ProduceDuckWing();
}

2、接口的作用

1、定义契约

IProductionFactory 接口定义了两个方法:ProduceDuckNeck 和 ProduceDuckWing。任何实    现 IProductionFactory 的类,都必须提供这两个方法的具体实现。

2、保持代码的一致性

所有实现了 IProductionFactory 接口的类,都会有同样的方法名称、参数列表和返回类型。从而保证了无论使用哪个工厂类,我们都可以以相同的方式使用它们。

3、实现多态

通过接口,我们可以实现多态性。在本例中,WuhanFactory、NanjingFactory 和 ChangshaFactory(接下来会提到) 分别实现了通过相同的接口提供不同的实现,这意味着我们可以通过接口类型的引用调用具体实例的方法,而不需要知道其中具体实现的细节。

4、提高代码的可拓展性和可维护性

当我们想要添加新的工厂类或者改变生产方式时,只用确保新的类实现了 IProductionFactory 接口。而主程序仍然可以使用同样的方式来调用新工厂的方法,有助于代码的可扩展性和可维护性。

二、实现接口的具体工厂类

 1、代码实现

接下来,我们分别为武汉、南京和长沙工厂创建具体类,这些类通过实现前面定义的IProductionFactory接口,提供了生产鸭脖和鸭翅的具体操作实现。其中,武汉工厂既生产鸭脖又生产鸭翅,南京工厂不生产鸭脖,长沙工厂不生产鸭翅。

代码如下:

//武汉工厂既生产鸭脖又生产鸭翅
public class WuhanFactory : IProductionFactory
{
    public void ProduceDuckNeck()
    {
        Console.WriteLine("武汉工厂生产鸭脖");
    }

    public void ProduceDuckWing()
    {
        Console.WriteLine("武汉工厂生产鸭翅");
    }
}

//南京工厂只生产鸭翅,不生产鸭脖
public class NanjingFactory : IProductionFactory
{
    public void ProduceDuckNeck()
    {
        Console.WriteLine("南京工厂不生产鸭脖");
    }

    public void ProduceDuckWing()
    {
        Console.WriteLine("南京工厂生产鸭翅");
    }
}

//长沙工厂只生产鸭翅,不生产鸭脖
public class ChangshaFactory : IProductionFactory
{
    public void ProduceDuckNeck()
    {
        Console.WriteLine("长沙工厂生产鸭脖");
    }

    public void ProduceDuckWing()
    {
        Console.WriteLine("长沙工厂不生产鸭翅");
    }
}

2、意义

通过接口IProductionFactory,我们可以用同一接口引用来指向不同的实现类的实例(new WuhanFactory()new NanjingFactory()new ChangshaFactory(),在下文中会提到),而在调用ProduceDuckNeck()ProduceDuckWing()方法时,执行的却是各自类的具体实现,充分体现了多态性。

3、实现接口时的注意事项

1、完整实现接口中的所有方法

必须提供所有在接口中声明的方法的具体实现。

2、接口中的方法不能带有访问修饰符

接口中的方法默认是 public 的,不能有任何访问修饰符(如 private)。实现这些方法时,必须显式地使用 public 访问修饰符,来标明这些方法对外是可见的。

3、接口方法必须匹配

实现接口中的方法时,必须保证返回类型、方法名、参数类型和参数顺序完全匹配。

4、自行提供成员变量

接口只能包含方法的声明,故实现接口的类需要自行提供所需的数据成员。

5、显示实现接口成员

当一个类同时实现多个接口,并且这些接口中有相同的方法签名时,可以用接口的显式实现来区分这些方法。显式实现接口成员是指在方法名前加上接口名称(如 void IProductionFactory.ProduceDuckNeck()),这样该方法将仅在通过接口的引用类型调用时可用。

 

三、定义生产委托

 1、代码实现

定义委托ProductionDelegate来引用并执行工厂的生产方法。

代码如下:

public delegate void ProductionDelegate();

2、意义

通过ProductionDelegate委托来引用各个工厂的生产方法(如ProduceDuckNeckProduceDuckWing),使得我们可以在运行时决定具体调用哪个工厂的哪个生产方法。

3、使用委托时的注意事项

1、必须匹配

被委托引用的方法必须与委托的方法返回类型和参数列表完全匹配。

2、委托链的管理

在委托中,我们可以使用+=来添加多个方法,形成委托链。但需要注意的是,当委托链中的一个方法抛出异常时,后续的方法将不会执行。因此,我们在设计时要考虑异常的捕获和处理。

 四、使用委托实现生产管理

 1、代码实现

在主函数(Main)中,我们创建各个工厂的实例,并通过委托来调用它们的生产方法,以此来实现对生产的统一管理。

代码如下:

class Program
{
    static void Main(string[] args)
    {
        //分别创建武汉、南京和长沙工厂的实例
        IProductionFactory wuhanFactory = new WuhanFactory();
        IProductionFactory nanjingFactory = new NanjingFactory();
        IProductionFactory changshaFactory = new ChangshaFactory();

        //为每个工厂实例创建委托实例,并指向相应的生产方法
        //武汉工厂同时生产鸭脖和鸭翅
        ProductionDelegate wuhanProduction = new ProductionDelegate(wuhanFactory.ProduceDuckNeck);
        wuhanProduction += wuhanFactory.ProduceDuckWing;
        //南京工厂只生产鸭翅
        ProductionDelegate nanjingProduction = new ProductionDelegate(nanjingFactory.ProduceDuckWing); 
        //长沙工厂只生产鸭脖
        ProductionDelegate changshaProduction = new ProductionDelegate(changshaFactory.ProduceDuckNeck); 

        //调用委托执行生产
        //武汉
        Console.WriteLine("武汉工厂:");
        wuhanProduction();
        //南京
        Console.WriteLine("\n南京工厂:");
        nanjingProduction();
        //长沙
        Console.WriteLine("\n长沙工厂:");
        changshaProduction();
    }
}

2、执行结果


总结

在这个案例中,我们通过c#设计了一套系统来实现对周黑鸭工厂产品生产的统一管理,其中涉及到定义接口、实现具体工厂类、使用委托以及各方法的协同工作。通过这种方式,系统的各个部分既保持了足够的灵活性和扩展性,又能够在统一的框架下高效协作,达成我们想要实现的目标。

  • 34
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值