1.作业要求
使用C#(涉及类、接口、委托)实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。
2.思路
定义接口IProductionFactory用来生产鸭脖鸭翅,再在三个工厂类(WuhanFactory、NanjingFactory、ChangshaFactory)中分别具体实现IProductionFactory接口,最后通过委托进行生产。
3.实现
3.1定义生产接口IProductionFactory
IProductionFactory接口中应包含两个函数ProduceDuckNecks()和ProduceDuckWings()分别用于生产鸭脖和鸭翅。
public interface IProductionFactory
{
void ProduceDuckNecks();
void ProduceDuckWings();
}
3.2定义三个工厂类并分别具体实现生产接口IProductionFactory
3.2.1武汉工厂
public class WuhanFactory:IProductionFactory
{
public void ProduceDuckNecks()
{
Console.WriteLine("Wuhan factory produces duck necks.");
}
public void ProduceDuckWings()
{
Console.WriteLine("Wuhan factory produces duck wings.");
}
}
武汉工厂既能生产鸭脖,也能生产鸭翅。
3.2.2南京工厂
public class NanjingFactory : IProductionFactory
{
public void ProduceDuckNecks()
{
throw new Exception("Nanjing factory can't produce duck necks.");
}
public void ProduceDuckWings()
{
Console.WriteLine("Nanjing factory produces duck wings.");
}
}
南京工厂只能生产鸭翅,故南京工厂在调用ProduceDuckNecks()方法时会抛出异常
3.2.3长沙工厂
public class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNecks()
{
Console.WriteLine("Changsha factory produces duck necks.");
}
public void ProduceDuckWings()
{
throw new Exception("Changsha factory can't produce duck wings.");
}
}
长沙工厂只能生产鸭脖,故长沙工厂在调用ProduceDuckWings()方法时会抛出异常
3.3.定义委托用于main函数中的具体生产
public delegate void ProductionDelegate();
3.4main函数
3.4.1创建三个工厂实例
IProductionFactory wuhanfactory = new WuhanFactory();
IProductionFactory nanjingfactory = new NanjingFactory();
IProductionFactory changshafactory = new ChangshaFactory();
3.4.2创建委托实例并调用委托进行生产
ProductionDelegate produce_duck_necks = wuhanfactory.ProduceDuckNecks;
ProductionDelegate produce_duck_wings = wuhanfactory.ProduceDuckWings;
produce_duck_necks();
produce_duck_wings();
produce_duck_wings = nanjingfactory.ProduceDuckWings;
produce_duck_wings();
produce_duck_necks = changshafactory.ProduceDuckNecks;
produce_duck_necks();
3.5完整代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace zhouheiya
{
public interface IProductionFactory
{
void ProduceDuckNecks();
void ProduceDuckWings();
}
public class WuhanFactory:IProductionFactory
{
public void ProduceDuckNecks()
{
Console.WriteLine("Wuhan factory produces duck necks.");
}
public void ProduceDuckWings()
{
Console.WriteLine("Wuhan factory produces duck wings.");
}
}
public class NanjingFactory : IProductionFactory
{
public void ProduceDuckNecks()
{
throw new Exception("Nanjing factory can't produce duck necks.");
}
public void ProduceDuckWings()
{
Console.WriteLine("Nanjing factory produces duck wings.");
}
}
public class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNecks()
{
Console.WriteLine("Changsha factory produces duck necks.");
}
public void ProduceDuckWings()
{
throw new Exception("Changsha factory can't produce duck wings.");
}
}
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 produce_duck_necks = wuhanfactory.ProduceDuckNecks;
ProductionDelegate produce_duck_wings = wuhanfactory.ProduceDuckWings;
produce_duck_necks();
produce_duck_wings();
produce_duck_wings = nanjingfactory.ProduceDuckWings;
produce_duck_wings();
produce_duck_necks = changshafactory.ProduceDuckNecks;
produce_duck_necks();
Console.ReadLine();
}
}
}
3.6运行结果