作业要求:
使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。具体要求如下:
- 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
- 定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
- 使用委托 ProductionDelegate 定义生产委托。
在 Main 函数中,创建不同工厂的实例,并通过生产委托进行生产。
一.定义接口:
public interface IProductionFactory
{
void ProduceDuckNeck();
void ProduceDuckWing();
}
工厂有生产鸭脖和鸭翅两个功能。
二.定义类:
每个工厂有不同的生产方向,利用抛异常,以便后续对可能出现的错误进行异常处理.
武汉工厂:
// 武汉工厂类,实现IProductionFactory接口
public class WuhanFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("武汉工厂生产了鸭脖。");
}
public void ProduceDuckWing()
{
Console.WriteLine("武汉工厂生产了鸭翅。");
}
}
包含两个方法生产鸭脖和鸭翅.
用接口连接.
南京工厂:
// 南京工厂类,实现IProductionFactory接口
public class NanjingFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
throw new NotImplementedException("erro:南京工厂不能生产鸭脖。");
}
public void ProduceDuckWing()
{
Console.WriteLine("南京工厂生产了鸭翅。");
}
}
正常生产鸭翅,不生产鸭脖.
长沙工厂:
// 长沙工厂类,实现IProductionFactory接口
public class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("长沙工厂生产了鸭脖。");
}
public void ProduceDuckWing()
{
throw new NotImplementedException("erro:长沙工厂不能生产鸭翅。");
}
}
正常生产鸭脖,不生产鸭翅.
三.定义委托:
// 定义生产委托
public delegate void ProductionDelegate();
四.具体实现:
internal class Program
{
public static void FactoryProdauct(ProductionDelegate productionDelegate)
{
try
{
productionDelegate();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
static void Main(string[] args)
{
// 创建不同工厂的实例
WuhanFactory wuhanFactory = new WuhanFactory();
NanjingFactory nanjingFactory = new NanjingFactory();
ChangshaFactory changshaFactory = new ChangshaFactory();
// 创建生产委托
ProductionDelegate wuhanDelegate, nanjingDelegate, changshaDelegate;
//武汉
wuhanDelegate = wuhanFactory.ProduceDuckNeck;
wuhanDelegate += wuhanFactory.ProduceDuckWing;
//南京
nanjingDelegate =nanjingFactory.ProduceDuckNeck;
//长沙
changshaDelegate = changshaFactory.ProduceDuckWing;
//委托生产
FactoryProdauct(wuhanDelegate);
FactoryProdauct(nanjingDelegate);
FactoryProdauct(changshaDelegate);
Console.ReadKey();
}
}
创建三个工厂类,并实现委托,这里南京工厂和长沙工厂刚好反过来生产所以结果会显示异常
所以异常处理没有问题.
正常情况下南京工厂生产鸭翅长沙工厂生产鸭脖:
//南京
nanjingDelegate =nanjingFactory.ProduceDuckWing;
//长沙
changshaDelegate = changshaFactory.ProduceDuckNeck;
结果:
完整代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace factory
{
// 定义生产委托
public delegate void ProductionDelegate();
// 定义生产工厂接口
public interface IProductionFactory
{
void ProduceDuckNeck();
void ProduceDuckWing();
}
// 武汉工厂类,实现IProductionFactory接口
public class WuhanFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("武汉工厂生产了鸭脖。");
}
public void ProduceDuckWing()
{
Console.WriteLine("武汉工厂生产了鸭翅。");
}
}
// 南京工厂类,实现IProductionFactory接口
public class NanjingFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
throw new NotImplementedException("erro:南京工厂不能生产鸭脖。");
}
public void ProduceDuckWing()
{
Console.WriteLine("南京工厂生产了鸭翅。");
}
}
// 长沙工厂类,实现IProductionFactory接口
public class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("长沙工厂生产了鸭脖。");
}
public void ProduceDuckWing()
{
throw new NotImplementedException("erro:长沙工厂不能生产鸭翅。");
}
}
internal class Program
{
public static void FactoryProdauct(ProductionDelegate productionDelegate)
{
try
{
productionDelegate();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
static void Main(string[] args)
{
// 创建不同工厂的实例
WuhanFactory wuhanFactory = new WuhanFactory();
NanjingFactory nanjingFactory = new NanjingFactory();
ChangshaFactory changshaFactory = new ChangshaFactory();
// 创建生产委托
ProductionDelegate wuhanDelegate, nanjingDelegate, changshaDelegate;
//武汉
wuhanDelegate = wuhanFactory.ProduceDuckNeck;
wuhanDelegate += wuhanFactory.ProduceDuckWing;
//南京
nanjingDelegate =nanjingFactory.ProduceDuckWing;
//长沙
changshaDelegate = changshaFactory.ProduceDuckNeck;
//委托生产
FactoryProdauct(wuhanDelegate);
FactoryProdauct(nanjingDelegate);
FactoryProdauct(changshaDelegate);
Console.ReadKey();
}
}
}
小结:
本次作业实现的周黑鸭工厂模拟,主要为了巩固接口与委托的应用.其中的难点有对部分工厂无法实现部分功能的异常处理,使得程序有清晰的错误报告,当程序遇到无法处理的错误时,通过抛出异常,可以立即中断当前的执行流程,并将错误信息传递给上层调用者。这使得错误信息能够清晰地传达给开发者,帮助他们快速定位问题所在。