windows程序设计作业-周黑鸭工厂

一:作业内容 

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

 

二:作业要求

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

三:各部分代详解

 

1.定义接口

1.创建一个接口 IProductionFactory,用于定义工厂应该具备的生产能力;

2.在这个接口中,定义两个方法:ProduceDuckNeck 和 ProduceDuckWing,分别用于生产鸭脖和鸭翅。

代码如下:

public interface IProductionFactory  
{  
    void ProduceDuckNeck();  
    void ProduceDuckWing();  

    //此处定义了ProduceDuckNeck 和 ProduceDuckWing两个方法,分别代表生产鸭脖和鸭翅。
}

关于此代码中关于接口的作用:

       在上述代码中,接口(IProductionFactory)的定义了一个生产工厂的契约,它规定了工厂应该能够执行的行为——鸭脖和鸭翅的具体分工生产。

       除此之外;我们通过对接口的定义,还可以帮助我们获得如下的优势:

  1. 多态性:通过接口,我们可以创建不同类型的工厂对象(如武汉工厂、南京工厂和长沙工厂),并且将它们赋值给同一类型的接口变量。然后,我们可以使用接口变量来调用工厂的方法,而不需要关心具体的工厂类型。这种多态性使得代码更加通用和易于扩展。

  2. 扩展性:如果将来需要添加新的生产方法,只需要在接口中添加相应的方法声明,然后更新实现接口的类以提供这些方法的具体实现。这样,所有使用接口的代码都将能够自动获得这些新方法,而无需进行大量修改。

       在上述的代码中,WuhanFactoryNanjingFactory 和 ChangshaFactory 分别实现了 IProductionFactory 接口,并提供了具体的生产方法实现。所以在后续的 Main 函数中,我们在创建了这些工厂的实例之后,可以通过委托调用它们的方法。

2.实现接口(具体各工厂类)

1.根据不同的工厂(武汉工厂、南京工厂、长沙工厂)创建具体的类,并实现 IProductionFactory 接口;

2.在每个具体工厂类中,实现接口定义的方法。对于不能生产的产品,可以抛出异常或者简单地留空方法体。 

 

  武汉工厂(WuhanFacrory) 

//武汉工厂:可生产鸭脖和鸭翅

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

南京工厂(NanjingFactory) 

//南京工厂:只能生产鸭翅

public class NanjingFactory : IProductionFactory  
{  
    public void ProduceDuckNeck()  
    {  
        throw new NotImplementedException("南京工厂不能生产鸭脖");  
    }  
  
    public void ProduceDuckWing()  
    {  
        Console.WriteLine("南京工厂生产鸭翅");  
    }  
}

 长沙工厂(ChangshaFactory)

//长沙工厂:只能生产鸭脖

public class ChangshaFactory : IProductionFactory  
{  
    public void ProduceDuckNeck()  
    {  
        Console.WriteLine("长沙工厂生产鸭脖");  
    }  
  
    public void ProduceDuckWing()  
    {  
        throw new NotImplementedException("长沙工厂不能生产鸭翅");  
    }  
}

 

3.委托定义

1.定义一个委托 ProductionDelegate,其类型与工厂类中的生产方法签名一致;

2.委托允许我们将方法作为参数传递,并且在我们需要时可以调用它们。

public delegate void ProductionDelegate();

4.主函数代码的实现

在 Main 函数中:

  1. 创建了各个工厂类的实例;
  2. 定义了两个委托实例 produceDuckNeck 和 produceDuckWing,并将它们与包装方法 produceDuckNeckWrapper produceDuckWingWrapper;
  3. 通过委托实例调用工厂的生产方法。当调用不能生产特定产品的工厂方法时,会抛出 NotImplementedException 异常,并在 try-catch 块中捕获处理。
class Program  
{  
    static void Main(string[] args)  
    {  
        // 创建工厂实例  
        IProductionFactory wuhanFactory = new WuhanFactory();  
        IProductionFactory nanjingFactory = new NanjingFactory();  
        IProductionFactory changshaFactory = new ChangshaFactory();  
  
        // 定义委托实例  
        ProductionDelegate produceDuckNeck = new ProductionDelegate(ProduceDuckNeck);  
        ProductionDelegate produceDuckWing = new ProductionDelegate(ProduceDuckWing);  
  
        // 通过委托调用工厂的生产方法  
        produceDuckNeck(wuhanFactory); // 武汉工厂生产鸭脖  
        produceDuckWing(wuhanFactory); // 武汉工厂生产鸭翅  
  
        try  
        {  
            produceDuckNeck(nanjingFactory); // 南京工厂不能生产鸭脖,会抛出异常  
        }  
        catch (NotImplementedException ex)  
        {  
            Console.WriteLine(ex.Message);  
        }  
  
        produceDuckWing(nanjingFactory); // 南京工厂生产鸭翅  
  
        produceDuckNeck(changshaFactory); // 长沙工厂生产鸭脖  
  
        try  
        {  
            produceDuckWing(changshaFactory); // 长沙工厂不能生产鸭翅,会抛出异常  
        }  
        catch (NotImplementedException ex)  
        {  
            Console.WriteLine(ex.Message);  
        }  
    }  
}

 四:代码运行结果

79466be0d27043c58103902ed51a9c4d.png

五:作业小结

难点:

  1. 接口设计的合理性:设计接口时,需要确保接口的方法能够完整地表达工厂的行为。

  2. 实现类的逻辑复杂性:每个实现类都需要根据自身的业务逻辑来实现接口中的方法。

  3. 多态性的理解与应用:多态性是面向对象编程的重要特性之一,但在实际应用中,需要深入理解其原理并正确地使用。在代码中,需要确保使用接口引用来操作对象,以便能够利用多态性的优势。

  4. 委托的使用与理解:需要理解委托的定义、使用场景以及如何将方法作为参数传递。在代码中,需要正确地创建委托实例并调用其指向的方法。代码中使用了委托(Func<string>)来间接地调用工厂的方法。委托允许将方法作为参数传递,增加了代码的灵活性和可重用性。在 Main 函数中,通过委托的实例来调用工厂的生产方法,并将结果打印出来。

 

  • 35
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值