目录
一、题目介绍
使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。具体要求如下:
- 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
- 定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
- 使用委托 ProductionDelegate 定义生产委托。
- 在 Main 函数中,创建不同工厂的实例,并通过生产委托进行生产。
二、定义生产工厂接口
1.接口定义
1.1 接口介绍:接口(interface)是一种定义了一组抽象成员(方法、属性、事件或索引器)的类型。接口定义了一种契约,规定了类或结构体应该实现的成员。
1.2 案例定义:
interface IExampleInterface
{
// 方法
void ExampleMethod();
// 属性
string ExampleProperty { get; set; }
// 事件
event EventHandler ExampleEvent;
// 索引器
int this[int index] { get; set; }
}
2.代码实现
定义生产工厂接口,定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。ProduceDuckNeck() 生产鸭脖,ProduceDuckWing() 生产鸭翅。
代码如下:
public interface IProductionFactory
{
void ProduceDuckNeck();
void ProduceDuckWing();
}
三、实现生产工厂接口
1.接口的用法
1.1 定义规范:接口定义了一组行为规范,所有实现该接口的类都必须提供这些行为的具体实现。
1.2 多态性:接口提供了一种多态性的实现方式。可以通过接口类型来引用实现该接口的任何类的实例,从而实现不同类的实例对同一方法的调用。
1.3 解耦:接口可以用于解耦,减少类之间的依赖性。客户端代码可以通过接口来调用方法,而不需要了解具体实现类的细节。
1.4 实现多继承:C#不支持类的多重继承,但是一个类可以实现多个接口。因此,接口提供了一种实现多继承的方式。
2.接口的作用
2.1规范:接口定义了类应该具有的行为,使得代码更加规范和可维护。
2.2多态性:接口提供了一种多态性的实现方式,可以通过接口类型来引用不同类的实例,从而实现统一的方法调用。
2.3扩展性:通过接口可以实现代码的扩展性,使得系统更容易扩展和修改。
2.4解耦:接口可以降低类之间的耦合度,提高代码的灵活性和可重用性。
3.接口的操作
武汉工厂(WuhanFactory)、南京工厂(NanjingFactory)、长沙工厂(ChangshaFactory),它们都实现了 IProductionFactory 接口。
4.代码实现
// 武汉工厂实现生产工厂接口
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("长沙工厂不能生产鸭翅");
}
}
四、定义生产委托
1.委托定义
1.1委托介绍: 委托(Delegate)是一种类型,用于引用方法。委托可以看作是函数指针,它允许将方法作为参数传递给其他方法,或者将方法存储在数据结构中,以便稍后调用。委托在事件处理、异步编程和回调等场景中非常有用。
1.2委托定义案例 :委托使用 delegate
关键字定义。委托类型指定了可以被委托引用的方法的签名。委托实例持有对方法的引用,可以调用该方法。
delegate void MyDelegate(string message);
2.委托用法
2.1事件处理:委托常用于事件处理,当事件触发时,会调用委托引用的方法。
2.2回调:委托可以作为参数传递给其他方法,允许将方法作为参数传递给其他方法,并在适当的时候调用。
2.3异步编程:委托与异步编程密切相关,例如通过委托异步调用方法、使用异步回调等。
2.4扩展方法:委托还可以用于定义扩展方法,允许向现有类型添加新方法。
3.委托的操作
使用委托 ProductionDelegate 定义生产委托。
public delegate void ProductionDelegate();
创建不同工厂的实例,并通过生产委托进行生产。
4.代码实现
static void Main(string[] args)
{
// 创建不同工厂的实例
IProductionFactory wuhanFactory = new WuhanFactory();
IProductionFactory nanjingFactory = new NanjingFactory();
IProductionFactory changshaFactory = new ChangshaFactory();
// 使用生产委托进行生产
ProductionDelegate duckNeckProduction1 = wuhanFactory.ProduceDuckNeck;
ProductionDelegate duckWingProduction1 = wuhanFactory.ProduceDuckWing;
ProductionDelegate duckWingProduction2 = nanjingFactory.ProduceDuckWing;
ProductionDelegate duckNeckProduction2 = changshaFactory.ProduceDuckNeck;
// 生产
duckNeckProduction1();
duckWingProduction1();
duckWingProduction2();
duckNeckProduction2();
}
五、整体代码
using System;
// 定义生产工厂接口
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("长沙工厂不能生产鸭翅");
}
}
class Program
{
// 定义生产委托
public delegate void ProductionDelegate();
static void Main(string[] args)
{
// 创建不同工厂的实例
IProductionFactory wuhanFactory = new WuhanFactory();
IProductionFactory nanjingFactory = new NanjingFactory();
IProductionFactory changshaFactory = new ChangshaFactory();
// 使用生产委托进行生产
ProductionDelegate duckNeckProduction1 = wuhanFactory.ProduceDuckNeck;
ProductionDelegate duckWingProduction1 = wuhanFactory.ProduceDuckWing;
ProductionDelegate duckWingProduction2 = nanjingFactory.ProduceDuckWing;
ProductionDelegate duckNeckProduction2 = changshaFactory.ProduceDuckNeck;
// 生产
duckNeckProduction1();
duckWingProduction1();
duckWingProduction2();
duckNeckProduction2();
}
}
六、运行结果
七、总结
这段代码创建了三个工厂类:武汉工厂(WuhanFactory)、南京工厂(NanjingFactory)、长沙工厂(ChangshaFactory),它们都实现了 IProductionFactory 接口。接着定义了一个生产委托 ProductionDelegate。在 Main 函数中,创建了不同工厂的实例,并使用委托进行了生产。