文章目录
目录
作业内容
使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。具体要求如下:
- 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
- 定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
- 使用委托 ProductionDelegate 定义生产委托。
- 在 Main 函数中,创建不同工厂的实例,并通过生产委托进行生产。
一、实现的基本思路
1.定义一个委托 ProductionDelegate,用于引用生产方法。
2.定义一个接口 IProductionFactory,其中包含了两个方法 ProduceDuckNeck 和 ProduceDuckWing,用于规范工厂需要实现的生产行为。
3.然后分别定义了三个工厂类 WuhanFactory、NanjingFactory 和 ChangshaFactory,它们分别实现了 IProductionFactory 接口,并实现了接口中定义的生产方法。
4.在 Main 方法中,创建了三个不同工厂的实例,并创建了三个不同的生产委托。然后,通过 += 运算符将对应工厂的生产方法添加到委托的调用列表中,最后调用委托。
二、关键分析
1.接口
1.1接口
1.除显示实现接口外,类中接口实现必须显示声明为public。
2.对接口方法的调用与类中的情况相同。如果底层成员的命名与继承而来的高层成员一致,那么底层成员将覆盖同名的高层成员。
3.接口不是类,所以不能用接口创建对象,即不能用new运算符。
1.2接口的定义
public interface IProductionFactory
定义了一个接口,包含了生产鸭脖和生产鸭翅的方法声明。
public interface IProductionFactory
{
void ProduceDuckNeck(); // 生产鸭脖
void ProduceDuckWing(); // 生产鸭翅
}
1.3接口的实现
public class WuhanFactory : IProductionFactory
public class NanjingFactory : IProductionFactory
public class ChangshaFactory : IProductionFactory
分别实现了 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.委托
2.1委托
1.使用委托需要三个步骤:声明委托类型,创建委托实例,向委托实例注册方法。
2.委托和重载相反,必须同参不同名。
3.语法:[访问修饰符] event 委托名 事件名; //先有委托名。
2.2委托的定义
public delegate void ProductionDelegate();
定义了一个委托,用于引用生产方法。
public delegate void ProductionDelegate();
2.3委托的实现
在 Main
函数中,通过 ProductionDelegate
委托实例化了三个委托对象,分别是 Wuhan
、Nanjing
和 Changsha
。这些委托对象都分别关联了对应工厂的生产方法。
ProductionDelegate Wuhan = new ProductionDelegate(wuhanFactory.ProduceDuckNeck);
ProductionDelegate Nanjing = new ProductionDelegate(nanjingFactory.ProduceDuckWing);
ProductionDelegate Changsha = new ProductionDelegate(changshaFactory.ProduceDuckNeck);
三、代码的实现
1.代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace windows第一次课程设计
{
using System;
// 定义委托
public delegate void ProductionDelegate();
// 定义接口
public interface IProductionFactory
{
void ProduceDuckNeck(); // 生产鸭脖
void ProduceDuckWing(); // 生产鸭翅
}
// 武汉工厂生产鸭脖和鸭翅
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("长沙工厂不能生产鸭翅!");
}
}
internal class Program
{
static void Main(string[] args)
{
// 创建不同工厂的实例
WuhanFactory wuhanFactory = new WuhanFactory();
NanjingFactory nanjingFactory = new NanjingFactory();
ChangshaFactory changshaFactory = new ChangshaFactory();
// 创建不同的生产委托
ProductionDelegate Wuhan = new ProductionDelegate(wuhanFactory.ProduceDuckNeck);
Wuhan += wuhanFactory.ProduceDuckWing;
Wuhan();
ProductionDelegate Nanjing = new ProductionDelegate(nanjingFactory.ProduceDuckWing);
Nanjing += nanjingFactory.ProduceDuckNeck;
Nanjing();
ProductionDelegate Changsha = new ProductionDelegate(changshaFactory.ProduceDuckNeck);
Changsha += changshaFactory.ProduceDuckWing;
Changsha();
Console.ReadLine();
}
}
}
2.结果
总结
在本次课程作业中,我们通过c#用接口委托等方法设计了对周黑鸭工厂产品生产的统一管理的系统。
通过接口定义工厂需要实现的生产方法,使得不同工厂的生产行为具有统一的规范性。同时,通过接口,实现了不同工厂的生产行为的灵活切换和替换,从而提高了系统的可扩展性和可维护性。使用接口也可以实现多态性,允许不同工厂类实现相同的接口方法,但具体实现方式可以不同,从而实现了不同工厂生产不同产品的功能。
通过委托,实现了对方法的动态调用,使得在运行时可以根据需要动态地调用不同的生产方法。
在本次案例中,接口和委托的使用提高了代码的灵活性,同时实现了面向对象编程中的多态性和动态调用等特性,使得代码更加健壮和易于理解。