目录
2.2 定义类( WuhanFactory、NanjingFactory、ChangshaFactory)
0 作业内容
使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。具体要求如下:
- 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
- 定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
- 使用委托 ProductionDelegate 定义生产委托。
- 在 Main 函数中,创建不同工厂的实例,并通过生产委托进行生产。
1 代码设计
1.1 设计思路
通过接口定义统一的生产方式,使得不同工厂可以调用相同的生产方式。委托的使用则可以让工厂根据需求进行动态的生产。
- 创建一个接口IProductionFactory使其包含生产鸭脖的方法DuckNeckProduction和生产鸭翅的方法DuckWingProduction;
- 创建三个类,分别代表武汉工厂WuhanFactory、南京工厂NanjingFactory和长沙工厂ChangshaFactory,并使这三个类可以调用接口IProductionFactory;
- 定义委托ProductionDelegate,用于生成不同的生产委托;
- 创建不同的工厂实例,并生成不同的生产委托进行生产。
1.2 难点
- 确保每个工厂可以正常调用接口;
- 定义委托以及向委托实例注册方法。
2 代码实现
2.1 定义接口IProductionFactory
//定义接口IProductionFactory,包含生产鸭脖和鸭翅的方法
public interface IProductionFactory
{
//生产鸭脖
void DuckNeckProduction();
//生产鸭翅
void DuckWingProduction();
}
在接口IProductionFactory中定义两个方法,分别表示生产鸭脖DuckNeckProduction和生产鸭翅DuckWingProduction.
2.2 定义类( WuhanFactory、NanjingFactory、ChangshaFactory)
根据各个工厂的生产特点定义不同的工厂类。
2.2.1 定义武汉工厂WuhanFactory
//定义类WuhanFactor,实现接口 IProductionFactory
class WuhanFactory :IProductionFactory
{
//既生产鸭脖又生产鸭翅
public void DuckNeckProduction()
{
Console.WriteLine("WuhanFactory produces duck necks.");
}
public void DuckWingProduction()
{
Console.WriteLine("WuhanFactory produces duck wings.");
}
}
2.2.2 定义南京工厂NanjingFactory
//定义类NanjingFactory,实现接口 IProductionFactory
class NanjingFactory :IProductionFactory
{
//只生产鸭翅
public void DuckNeckProduction()
{
Console.WriteLine("NanjingFactory does not produce duck necks.");
}
public void DuckWingProduction()
{
Console.WriteLine("NanjingFactory produces duck wings.");
}
}
2.2.3 定义长沙工厂ChangshaFactory
//定义类ChanngshaFactory,实现接口 IProductionFactory
class ChanngshaFactory :IProductionFactory
{
//只生产鸭脖
public void DuckNeckProduction()
{
Console.WriteLine("ChangshaFactory produces duck necks.");
}
public void DuckWingProduction()
{
Console.WriteLine("ChangshaFactory does not produce duck wings.");
}
}
2.3 定义委托ProductionDelegate
//定义ProductionDelegate
public delegate void ProductionDelegate();
2.4 Main函数
2.4.1 创建不同的工厂实例
//创建不同的工厂实例
IProductionFactory wuhanfactory = new WuhanFactory();//武汉工厂
IProductionFactory nanjingfactory = new NanjingFactory();//南京工厂
IProductionFactory changshafactory = new ChanngshaFactory();//长沙工厂
注意:接口本身不能直接实例化,但你可以使用接口类型的变量引用实现接口的类的实例,并通过该变量访问接口成员。
2.4.2 创建不同的生产委托
//创建不同的生产委托
//武汉工厂
ProductionDelegate wuhanproductionDelegate = wuhanfactory.DuckNeckProduction;
wuhanproductionDelegate += wuhanfactory.DuckWingProduction;
//南京工厂
ProductionDelegate nanjingproductionDelegate = nanjingfactory.DuckNeckProduction;
nanjingproductionDelegate += nanjingfactory.DuckWingProduction;
//长沙工厂
ProductionDelegate changshaproductionDelegate = changshafactory.DuckNeckProduction;
changshaproductionDelegate += changshafactory.DuckWingProduction;
说明:采用多播委托来对各个生产委托进行创建。
2.4.3 通过生产委托进行生产
//通过生产委托进行生产
//武汉工厂
Console.WriteLine("Product of WuhanFactory:");
wuhanproductionDelegate();
//南京工厂
Console.WriteLine("Product of NanjngFactory:");
nanjingproductionDelegate();
//长沙工厂
Console.WriteLine("Product of ChangshaFactory:");
changshaproductionDelegate();
说明:myDelegate()是一种调用委托更简化的方式,即直接将委托实例作为方法调用。其等效于myDelegate.Invoke()。
3 运行结果
4 总结
通过本次作业,我学会了C#运用类、接口、委托来实现对周黑鸭工厂的产品生产统一管理。熟悉了接口、委托的基本结构及用法。运用这种设计方法使得每个工厂根据自身的特点生产对应的产品,而调用者只需要通过工厂接口和产品接口来操作,无需关心具体的工厂类和产品类,这让系统操作更加灵活,也提高了代码的可维护性。
5 完整代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Factory
{
//定义接口IProductionFactory,包含生产鸭脖和鸭翅的方法
public interface IProductionFactory
{
//生产鸭脖
void DuckNeckProduction();
//生产鸭翅
void DuckWingProduction();
}
//定义类WuhanFactor,实现接口 IProductionFactory
class WuhanFactory :IProductionFactory
{
//既生产鸭脖又生产鸭翅
public void DuckNeckProduction()
{
Console.WriteLine("WuhanFactory produces duck necks.");
}
public void DuckWingProduction()
{
Console.WriteLine("WuhanFactory produces duck wings.");
}
}
//定义类NanjingFactory,实现接口 IProductionFactory
class NanjingFactory :IProductionFactory
{
//只生产鸭翅
public void DuckNeckProduction()
{
Console.WriteLine("NanjingFactory does not produce duck necks.");
}
public void DuckWingProduction()
{
Console.WriteLine("NanjingFactory produces duck wings.");
}
}
//定义类ChanngshaFactory,实现接口 IProductionFactory
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("Product of WuhanFactory:");
wuhanproductionDelegate();
//南京工厂
Console.WriteLine("Product of NanjngFactory:");
nanjingproductionDelegate();
//长沙工厂
Console.WriteLine("Product of ChangshaFactory:");
changshaproductionDelegate();
Console.ReadLine();
}
}
}