windows程序设计课程作业一:使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理

 一,作业内容 

使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。具体要求如下:

  1. 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
  2. 定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
  3. 使用委托 ProductionDelegate 定义生产委托。
  4. 在 Main 函数中,创建不同工厂的实例,并通过生产委托进行生产

二,代码实现

1,定义接口

接口的定义:接口使用interface关键字来定义,后面跟着接口的名称。接口名称通常遵循PascalCasing的命名约定。

接口的成员:接口可以包含以下几种类型的成员:方法,属性,事件,索引器。

interface IMyInterface  
{  
    void ProduceDuckNecks();
    void ProduceDuckWings();// 方法成员声明  
}

 2,定义类

类的定义:类使用class关键字定义,后面跟着类名。类名通常遵循PascalCasing(首字母大写,每个单词的首字母也大写)的命名约定。

类的成员:类可以包含以下类型的成员:

字段:存储数据。
属性:提供字段的访问和修改。
方法:执行特定的操作。
事件:通知其他对象当某些特殊事情发生时。
嵌套类:在类内部定义的类。
常量:表示不可变的值。
索引器:允许对象像数组一样进行索引。
运算符重载:为自定义类型定义运算符的行为。
构造函数和析构函数:用于对象的初始化和清理。

WuhanFactory

class NanJingFactory : IProductionFactory:这里声明了一个名为 NanJingFactory 的类,并指定它实现了 IProductionFactory 接口。这意味着 NanJingFactory 类必须提供 IProductionFactory 接口中声明的所有方法的具体实现。

class WuhanFactory : IProductionFactory
{
    public void ProduceDuckNecks()
    {
        System.Console.WriteLine("Wuhan factory is producing duck necks.");
    }

    public void ProduceDuckWings()
    {
        System.Console.WriteLine("Wuhan factory is producing duck wings.");
    }
}

NanjingFactory

public void CreateYaChi():使用 throw 关键字抛出了一个 NotImplementedException 异常。异常信息为“Error: Nanjing factory cannot produce duck necks!”,这表示长沙工厂并不具备生产鸭翅的能力,如果调用这个方法,程序会抛出异常并停止执行。

class NanjingFactory : IProductionFactory
{
    public void ProduceDuckNecks()
    {
        throw new NotImplementedException("Error: Nanjing factory cannot produce duck necks!");
    }

    public void ProduceDuckWings()
    {
        System.Console.WriteLine("Nanjing factory is producing duck wings.");
    }
}

ChangshaFactory

class ChangshaFactory : IProductionFactory
{
    public void ProduceDuckWings()
    {
        throw new NotImplementedException("Error: Changsha factory cannot produce duck wings!");
    }

    public void ProduceDuckNecks()
    {
        System.Console.WriteLine("Changsha factory is producing duck necks.");
    }
}

3,定义委托

这里定义了一个名为 ProductionDelegate 的委托,它接受一个 string 类型的参数 productName,没有返回值。委托是C#中的一种类型,它安全地封装了方法的签名和引用,可以将方法作为参数传递或者赋值给变量。

// 定义生产委托  
public delegate void ProductionDelegate();

4,主函数main

internal class Program
{
    public static void FactoryProduct(ProductionDelegate productionDelegate)
    {
        // 如果委托无误,正常调用
        try
        {
            productionDelegate();
        }
        // 如果捕获到异常,则输出错误信息
        catch (NotImplementedException e)
        {
            System.Console.WriteLine(e.Message);
        }
    }
    private static void Main(string[] args)
    {
        // 创建工厂实例
        IProductionFactory wuhanFactory, nanjingFactory, changshaFactory;
        wuhanFactory = new WuhanFactory();
        nanjingFactory = new NanjingFactory();
        changshaFactory = new ChangshaFactory();

        // 实现委托
        ProductionDelegate wuhanDelegate, nanjingDelegate, changshaDelegate;
        // 武汉
        wuhanDelegate = wuhanFactory.ProduceDuckNecks;
        wuhanDelegate += wuhanFactory.ProduceDuckWings;
        // 南京
        nanjingDelegate = nanjingFactory.ProduceDuckWings;
        // 长沙
        changshaDelegate = changshaFactory.ProduceDuckNecks;

        // 通过委托进行生产
        FactoryProduct(wuhanDelegate);
        FactoryProduct(nanjingDelegate);
        FactoryProduct(changshaDelegate);
    }
}

在上述代码中,我们定义了 ProductionDelegate 委托,并创建了三个实现 IProductionFactory 接口的工厂类。在 Main 函数中,我们创建了工厂实例,并创建了生产委托的实例,然后通过委托实例调用了生产方法。我们还提供了一个辅助方法 ProduceByFactory 来根据工厂实例和产品名称进行生产,该方法可以处理不支持的产品类型情况。

请注意,根据题目要求,如果某个工厂不支持生产某种产品,我们应该在工厂的方法实现中抛出 NotSupportedException 异常。在 Main 函数的 ProduceByFactory 方法中,我们没有显式处理这种异常,因为在这个简单的例子中,我们假设工厂有能力生产请求的产品。在实际应用中,应该添加适当的异常处理逻辑来确保程序的健壮性。

三,测试结果

 四,实验难点

  1. 接口与实现的匹配:确保每个工厂类都正确地实现了接口中定义的方法。例如,南京工厂和长沙工厂应该只实现它们能够生产的产品的方法,并抛出异常或返回错误消息来表明它们不能生产其他产品。

  2. 委托的使用:理解委托如何作为方法指针工作,以及如何将对象实例作为参数传递给委托调用的方法。在本例中,ProductionDelegate 委托用于调用工厂实例的生产方法。

  3. 错误处理:当工厂不支持生产某种产品时,需要适当地处理这种情况。这可以通过抛出异常、返回错误码或提供默认行为来实现。在本例中,我们选择了抛出 NotImplementedException 异常。

  4. 代码的健壮性和可维护性:设计工厂类时,需要考虑代码的扩展性和可维护性。如果将来需要添加新的产品类型或工厂,代码应该能够轻松地适应这些变化。

 

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值