C#解决周黑鸭工厂产品生产统一管理的问题


一、windows程序设计课程作业一

1.作业内容

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

主要涉及以下关键知识点:
类:用于定义工厂和产品的特性和行为。
接口:定义工厂的公共契约,实现解耦。
委托:封装生产方法,便于动态调用。

2.作业要求

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

二.设计思路

首先定义工厂的公共契约,包括生产鸭脖和鸭翅的方法。然后创建不同的工厂类,实现公共接口,并提供具体的生产方法。再定义生产委托,封装生产方法。最后在Main函数中使用委托动态调用不同工厂的生产方法。

本作业使用接口-类-委托的模式,解耦了工厂和产品,实现了工厂和生产方法的分离。通过使用委托,可以动态地调用不同工厂的生产方法,便于扩展和维护。

三.注意事项

1.类

(1)注意类的职责划分,将不同的功能模块封装在不同的类中,提高代码的可维护性。
(2)注意类的继承和多态关系,合理使用继承和多态来实现代码复用和扩展性。使用继承关系来实现工厂的共性,如将所有工厂的共性方法定义在基类中。

2.接口

(1)接口定义了类的公共契约,因此需要注意接口的定义是否完整和准确。
(2)接口中的方法不要有具体实现,以允许不同的工厂类实现不同的生产逻辑。

3.委托

(1)委托封装了方法,因此需要注意委托的类型安全,确保委托只能指向 IProductionFactory 接口的方法。
(2)委托可以简化代码,但需要注意委托的使用场景,避免滥用委托导致代码难以理解和维护。

四、代码实现

1.定义接口

接口定义了两个方法,用于生产鸭脖和鸭翅。

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

2.定义类

每个工厂类实现了接口中定义的生产方法,并返回相应的产品。需要注意的是,南京工厂和长沙工厂分别不能生产鸭脖和鸭翅,因此抛出异常。

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("长沙工厂不生产鸭翅");

    }
}

3.定义委托

定义生产委托ProductionDelegate。

public delegate void ProductionDelegate();

4.创建Main 函数

首先创建工厂实例,然后根据生产需求动态改变委托指向不同的生产方法。最后输出生产的产品。

public static void Main(string[] args)
{
    ProductionDelegate productionDelegate;// 创建委托,委托指向不同工厂的生产方法

	// 创建不同工厂的实例
	IProductionFactory wuhanFactory = new WuhanFactory();// 武汉
	IProductionFactory nanjingFactory = new NanjingFactory();// 南京
	IProductionFactory changshaFactory = new ChangshaFactory();// 长沙
	
	// 生产鸭脖
	ProductionDelegate wuhanProduction = new ProductionDelegate(wuhanFactory.ProduceDuckNeck);
	ProductionDelegate changshaProduction = new ProductionDelegate(changshaFactory.ProduceDuckNeck);
	
	// 生产鸭翅
	wuhanProduction += wuhanFactory.ProduceDuckWing;
	ProductionDelegate nanjingProduction = new ProductionDelegate(nanjingFactory.ProduceDuckWing);
	
	// 输出生产的产品
	wuhanProduction();
	nanjingProduction();
	changshaProduction();
}

五.运行结果

在这里插入图片描述

六.作业难点

实现 IProductionFactory 接口时,需要考虑不同工厂的生产能力,对于不能生产的产品抛出异常。在 Main 函数中,委托的指向需要根据具体的生产需求动态改变,需要注意委托的类型安全。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值