目录
前言
一、定义接口
1、接口的介绍
2、代码实现
二、实现接口的具体工厂类
1、接口主要作用
2、操作
3、代码实现
三、定义生产委托
1、委托定义
2、使用委托注意事项
3、代码实现
四、整体代码
五、运行结果
六、总结
前言
使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。
具体要求如下:
1、定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
2、定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
3、使用委托 ProductionDelegate 定义生产委托。
4、在 Main 函数中,创建不同工厂的实例,并通过生产委托进行生产。
一、定义接口
1、接口的介绍
1.1接口的语法结构: [访问修饰符] interface 接口标识符 [:基接口列表] { 接口体;}
1.2接口成员访问权限为public,但不能加访问修饰符 接口成员不能有定义 接口的成员必须是方法,属性,事件或索引器,不能包含常数、字段、运算符、实例构造函数、析构函数或类型。
2.代码实现
定义了一个 IProductionFactory
接口,它包含两个方法,分别用于生产鸭脖和鸭翅。接口是一种规范,它定义了对象应该具备的行为,但不关心这些行为如何被实现。
代码如下:
// 定义生产接口
public interface IProductionFactory
{
void ProduceDuckNeck();
void ProduceDuckWing();
}
二、实现接口的具体工厂类
1、接口的主要作用包括:
1.1.使项目分离:通过接口,可以将项目的不同部分进行分离,使得每个部分都面向接口进行开发,从而提高开发效率。
1.2、降低耦合度:接口使得代码之间的耦合度降低,变得可插拔和可随意切换,提高了代码的灵活性和可维护性。
1.3、多实现和多继承:接口支持多实现和多继承,使得一个类可以实现多个接口,或者一个接口可以继承其他接口,从而实现了功能的扩展和复用。
2、操作
创建了三个具体的工厂类(WuhanFactory
、NanjingFactory
、ChangshaFactory
),每个类都实现了 IProductionFactory
接口。这些工厂类负责实现具体的生产逻辑。
3、代码实现
代码如下:
// 武汉工厂,实现生产鸭脖和鸭翅
public class WuhanFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("武汉工厂生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("武汉工厂生产鸭翅");
}
}
// 南京工厂,只能生产鸭翅
public class NanjingFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
throw new NotImplementedException("南京工厂不能生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("南京工厂生产鸭翅");
}
}
// 长沙工厂,只能生产鸭脖
public class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("长沙工厂生产鸭脖");
}
public void ProduceDuckWing()
{
throw new NotImplementedException("长沙工厂不能生产鸭翅");
}
}
三、定义生产委托
1.委托定义
[访问修饰符] delegate [委托类型] 委托名(参数)
public delegate void ProductionDelegate();
2、使用委托注意事项
2.1、必须匹配
被委托引用的方法必须与委托的方法返回类型和参数列表完全匹配。
在委托中,我们可以使用+=
来添加多个方法,形成委托链。但需要注意的是,当委托链中的一个方法抛出异常时,后续的方法将不会执行。因此,我们在设计时要考虑异常的捕获和处理。
3、代码实现
ProductionDelegate
是一个委托类型,它定义了一个方法的签名,这个方法没有参数并且没有返回值。委托类似于 C 或 C++ 中的函数指针,但它是类型安全的,并且可以使用 C# 的语法特性来定义和使用。
代码如下:
// 定义生产委托
public delegate void ProductionDelegate();
class Program
{
static void Main(string[] args)
{
// 创建不同工厂的实例
IProductionFactory wuhanFactory = new WuhanFactory();
IProductionFactory nanjingFactory = new NanjingFactory();
IProductionFactory changshaFactory = new ChangshaFactory();
// 创建生产鸭脖的委托实例
ProductionDelegate produceDuckNeck = wuhanFactory.ProduceDuckNeck;
// 调用委托生产鸭脖
produceDuckNeck();
// 创建生产鸭翅的委托实例
ProductionDelegate produceDuckWing = nanjingFactory.ProduceDuckWing;
// 调用委托生产鸭翅
produceDuckWing();
// 假设现在我们需要将鸭脖的生产切换到长沙工厂
produceDuckNeck = changshaFactory.ProduceDuckNeck;
// 再次调用委托生产鸭脖
produceDuckNeck();
}
}
四、整体代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp17
{
// 定义生产接口
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 NotImplementedException("南京工厂不能生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("南京工厂生产鸭翅");
}
}
// 长沙工厂,只能生产鸭脖
public class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("长沙工厂生产鸭脖");
}
public void ProduceDuckWing()
{
throw new NotImplementedException("长沙工厂不能生产鸭翅");
}
}
// 定义生产委托
public delegate void ProductionDelegate();
internal class Program
{
static void Main(string[] args)
{
// 创建不同工厂的实例
IProductionFactory wuhanFactory = new WuhanFactory();
IProductionFactory nanjingFactory = new NanjingFactory();
IProductionFactory changshaFactory = new ChangshaFactory();
// 创建生产鸭脖的委托实例
ProductionDelegate produceDuckNeck = wuhanFactory.ProduceDuckNeck;
// 调用委托生产鸭脖
produceDuckNeck();
// 创建生产鸭翅的委托实例
ProductionDelegate produceDuckWing = nanjingFactory.ProduceDuckWing;
// 调用委托生产鸭翅
produceDuckWing();
// 假设现在我们需要将鸭脖的生产切换到长沙工厂
produceDuckNeck = changshaFactory.ProduceDuckNeck;
// 再次调用委托生产鸭脖
produceDuckNeck();
}
}
}
五、运行结果
六、总结
在这个案例中,我们通过c#设计了一套系统来实现对周黑鸭工厂产品生产的统一管理,其中涉及到定义接口、实现具体工厂类、使用委托以及各方法的协同工作。通过这种方式,系统的各个部分既保持了足够的灵活性和扩展性,又能够在统一的框架下高效协作,达成我们想要实现的目标。