目录
一、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 函数中,委托的指向需要根据具体的生产需求动态改变,需要注意委托的类型安全。