一.作业内容
使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。
具体要求如下:
- 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
- 定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
- 使用委托 ProductionDelegate 定义生产委托。
- 在 Main 函数中,创建不同工厂的实例,并通过生产委托进行生产。
二.关键要点理解
2.1接口
在C#中,接口(Interface)是一种定义了一组方法、属性和事件的引用类型。接口提供了一种合约,规定了类或结构体必须实现的成员,但不提供这些成员的具体实现。接口可以被类或结构体实现,使得它们能够提供所规定的功能。
接下来我们看一个简单的例子理解一下。
- 接口的定义:使用interface关键词定义
// 定义接口
interface IShape
{
double CalculateArea();
}
- 实现接口的类:该接口提供了一个名为
Rectangle
的类,实现了IShape
接口,内部包含了对计算面积的公式的定义。
// 实现接口的类
class Rectangle : IShape
{
public double Width { get; set; }
public double Height { get; set; }
public Rectangle(double width, double height)
{
Width = width;
Height = height;
}
// 实现接口方法
public double CalculateArea()
{
return Width * Height;
}
}
- 主程序:创建实现接口的对象,并用对象调用相应的接口方法
// 主程序入口
class Program
{
static void Main(string[] args)
{
// 创建实现了接口的对象
Rectangle rectangle = new Rectangle(5.0, 3.0);
// 调用接口方法
double area = rectangle.CalculateArea();
Console.WriteLine($"矩形的面积为:{area}"); // 输出矩形的面积
}
}
- 运行结果:
总的来说,接口提供了一种规范和约束,定义了类应该具备的行为和功能,同时支持多态、代码重用等重要的面向对象编程原则。使用接口可以增强代码的可扩展性、可维护性和可测试性,使得程序更加灵活和易于扩展。
2.2委托
在 C# 中,委托(Delegate)是一种类型,它允许将方法作为参数传递给其他方法,或者允许将方法存储在数据结构中。简单来说,委托可以看作是方法的引用。
- 定义委托:实现两个数相加
// 定义一个委托类型,它接受两个整数参数并返回一个整数
delegate int Calculation(int a, int b);
- 委托的创建
class Program
{
static void Main(string[] args)
{
// 创建委托实例并指向加法方法
Calculation add = Add;
// 调用委托实例,传递两个整数参数,并输出结果
Console.WriteLine("Addition result: " + add(5, 3));
}
// 加法方法
static int Add(int a, int b)
{
return a + b;
}
}
- 运行结果:
总的来说,委托是 C# 中一种强大的功能,它提供了一种灵活的方式来处理方法调用和事件处理,使得代码更加模块化、可扩展和可维护。
三.回归本题:代码实现
3.1定义接口
定义接口IProductionFactory
使用interface定义接口,包含生产鸭脖鸭翅的方法。
public interface IProductionFactory
{
void DuckNeckProduction();
void DuckWingProduction();
}
3.2定义类
定义类 WuhanFactory、NanjingFactory、ChangshaFactory实现接口功能,不同的工厂对应生产不同的产品。
3.2.1定义武汉工厂
class WuhanFactory : IProductionFactory
{
//武汉工厂既可以生产鸭脖又可以生产鸭翅
public void DuckNeckProduction()
{
Console.WriteLine("WuhanFactory produces duck necks.");
}
public void DuckWingProduction()
{
Console.WriteLine("WuhanFactory produces duck wings.");
}
}
3.2.2定义南京工厂
class NanjingFactory : IProductionFactory
{
//南京工厂只生产鸭翅
public void DuckNeckProduction()
{
Console.WriteLine("NanjingFactory does not produce duck necks.");
}
public void DuckWingProduction()
{
Console.WriteLine("NanjingFactory produces duck wings.");
}
}
3.2.3定义长沙工厂
class ChanngshaFactory : IProductionFactory
{
//长沙工厂只生产鸭脖
public void DuckNeckProduction()
{
Console.WriteLine("ChangshaFactory produces duck necks.");
}
public void DuckWingProduction()
{
Console.WriteLine("ChangshaFactory does not produce duck wings.");
}
}
3.3定义委托
通过委托的方式可以在不直接调用方法的情况下引用方法,从而实现不同工厂的不同生产功能,具体的委托使用会在接下来的Main函数中体现。
//定义ProductionDelegate
public delegate void ProductionDelegate();
3.4Main函数的调用
在主函数中,我们将创建不同工厂的实例,然后利用委托指向对应的生产方法,接下来是实现的步骤。
3.4.1创建工厂实例
IProductionFactory wuhanfactory = new WuhanFactory();//武汉工厂
IProductionFactory nanjingfactory = new NanjingFactory();//南京工厂
IProductionFactory changshafactory = new ChanngshaFactory();//长沙工厂
3.4.2创建生产委托
//武汉工厂
ProductionDelegate wuhanproductionDelegate = wuhanfactory.DuckNeckProduction;
wuhanproductionDelegate += wuhanfactory.DuckWingProduction;
//南京工厂
ProductionDelegate nanjingproductionDelegate = nanjingfactory.DuckNeckProduction;
nanjingproductionDelegate += nanjingfactory.DuckWingProduction;
//长沙工厂
ProductionDelegate changshaproductionDelegate = changshafactory.DuckNeckProduction;
changshaproductionDelegate += changshafactory.DuckWingProduction;
3.4.3通过委托进行生产
使用委托实例调用方法。
//武汉工厂
Console.WriteLine("WuhanFactory:");
wuhanproductionDelegate();
//南京工厂
Console.WriteLine("NanjngFactory:");
nanjingproductionDelegate();
//长沙工厂
Console.WriteLine("ChangshaFactory:");
changshaproductionDelegate();
3.5完整代码展示
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Factory
{
public interface IProductionFactory
{
void DuckNeckProduction();
void DuckWingProduction();
}
class WuhanFactory : IProductionFactory
{
//武汉工厂既生产鸭脖又生产鸭翅
public void DuckNeckProduction()
{
Console.WriteLine("WuhanFactory produces duck necks.");
}
public void DuckWingProduction()
{
Console.WriteLine("WuhanFactory produces duck wings.");
}
}
class NanjingFactory : IProductionFactory
{
//南京工厂只生产鸭翅
public void DuckNeckProduction()
{
Console.WriteLine("NanjingFactory does not produce duck necks.");
}
public void DuckWingProduction()
{
Console.WriteLine("NanjingFactory produces duck wings.");
}
}
class ChanngshaFactory : IProductionFactory
{
//长沙工厂只生产鸭脖
public void DuckNeckProduction()
{
Console.WriteLine("ChangshaFactory produces duck necks.");
}
public void DuckWingProduction()
{
Console.WriteLine("ChangshaFactory does not produce duck wings.");
}
}
internal class Factory
{
//定义ProductionDelegate
public delegate void ProductionDelegate();
static void Main(string[] args)
{
//创建不同的工厂实例
IProductionFactory wuhanfactory = new WuhanFactory();
IProductionFactory nanjingfactory = new NanjingFactory();
IProductionFactory changshafactory = new ChanngshaFactory();
//创建不同的生产委托
//武汉工厂
ProductionDelegate wuhanproductionDelegate = wuhanfactory.DuckNeckProduction;
wuhanproductionDelegate += wuhanfactory.DuckWingProduction;
//南京工厂
ProductionDelegate nanjingproductionDelegate = nanjingfactory.DuckNeckProduction;
nanjingproductionDelegate += nanjingfactory.DuckWingProduction;
//长沙工厂
ProductionDelegate changshaproductionDelegate = changshafactory.DuckNeckProduction;
changshaproductionDelegate += changshafactory.DuckWingProduction;
//通过生产委托进行生产
//武汉工厂
Console.WriteLine("WuhanFactory:");
wuhanproductionDelegate();
//南京工厂
Console.WriteLine("NanjngFactory:");
nanjingproductionDelegate();
//长沙工厂
Console.WriteLine("ChangshaFactory:");
changshaproductionDelegate();
Console.ReadLine();
}
}
}
四.运行结果
五.总结
标签:Console,Windows,void,周黑,接口,工厂,WriteLine,程序设计,public From: https://blog.csdn.net/m0_74154005/article/details/137556016本次作业首先需要充分理解接口和委托,需要理解接口是什么,如何在类中实现接口定义的方法,委托是什么以及如何定义和使用委托来实现方法的动态调用。
此次作业难点在于:如何合理得使用类和接口设计好各个工厂类的结构,确保它们能够正确地实现接口定义的方法,并且能够通过委托进行统一的生产管理。