目录
1.代码目的:
使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。具体要求如下:
- 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
- 定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
- 使用委托 ProductionDelegate 定义生产委托。
在 Main 函数中,创建不同工厂的实例,并通过生产委托进行生产。
2具体思路:
工厂类在面向对象编程中是一个常用的设计模式,它负责创建对象,而无需客户端代码直接关注对象的具体实现。当需要根据具体需求实现接口中的方法时,工厂类能够发挥作用。以下是工厂类如何根据具体需求实现接口中的方法的一些关键点:
定义接口:首先,定义一个接口,它包含需要实现的方法。这个接口定义了一组操作的规范,任何实现这个接口的类都必须提供这些操作的具体实现。
创建具体实现类:接着,创建多个实现了该接口的类,每个类根据自己的需求实现了接口中的方法。这些类代表了不同的具体实现,它们提供了接口所需的功能。
引入工厂类:工厂类的作用是根据客户端的需求,动态地创建并返回实现了特定接口的对象。工厂类通常包含一个或多个静态方法,这些方法根据传入的参数或条件来决定创建哪个实现类的对象。
使用工厂方法创建对象:客户端代码不直接实例化实现类,而是调用工厂类的静态方法。工厂方法根据需求选择合适的实现类,并创建该类的对象。这样,客户端代码只需与接口交互,而无需关心具体的实现类。
扩展性:工厂模式使得系统具有很好的扩展性。当需要添加新的实现时,只需创建新的实现类并实现接口,然后在工厂类中添加相应的逻辑来选择这个新的实现。客户端代码无需修改,因为它们只与接口交互。
依题意,先分别定义接口以及三个工厂(其中三个工厂分别生产不同的东西,例如武汉生产鸭翅合鸭脖,而南京只能生产鸭翅),
最后在主函数类创建工厂实列,调用委托进行生产。
3.详细代码:
//先定义接口iProductionFactory,该接口包含鸭脖鸭翅的生产方法
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()
{
throw new NotSupportedException("南京工厂不能生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("南京工厂生产鸭翅");
}
}
//长沙工厂只能生产鸭脖
public class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("长沙工厂生产鸭脖");
}
public void ProduceDuckWing()
{
throw new NotSupportedException("长沙工厂不能生产鸭翅");
}
}
//定义生产委托
public delegate void ProductionDelegate();
//主函数
class Program
{
static void Main(string[] args)
{
// 创建工厂实例
IProductionFactory wuhanFactory = new WuhanFactory();
IProductionFactory nanjingFactory = new NanjingFactory();
IProductionFactory changshaFactory = new ChangshaFactory();
// 定义生产委托
ProductionDelegate produceDuckNeckDelegate = new ProductionDelegate(ProduceDuckNeck);
ProductionDelegate produceDuckWingDelegate = new ProductionDelegate(ProduceDuckWing);
// 通过委托进行生产
ProduceDuckNeck(wuhanFactory);
ProduceDuckNeck(changshaFactory);
ProduceDuckWing(wuhanFactory);
ProduceDuckWing(nanjingFactory);
// 生产鸭脖的委托方法
static void ProduceDuckNeck(IProductionFactory factory)
{
factory.ProduceDuckNeck();
}
// 生产鸭翅的委托方法
static void ProduceDuckWing(IProductionFactory factory)
{
factory.ProduceDuckWing();
}
}
4.运行结果:
5.小结与难点:
通过使用工厂类,我们可以轻松地根据具体需求创建不同实现类的对象,而无需在客户端代码中直接处理这些实现类的细节。这提高了代码的模块化和可维护性,使得系统更加灵活和可扩展。
在C#编程语言中,接口、多态、委托和重载是四个重要的概念,它们各自在面向对象编程中扮演着不可或缺的角色。这个题目较为综合的考察了接口,委托,函数重载,类等c#中重要的知识点。使我熟悉了对c#的运用,对这些知识点有了更深一层的了解。这道题目的难点在于分别对三个工厂类不同的定义,其中还涉及到接口的知识,综合难度较高。