Windows程序设计作业——周黑鸭工厂的接口委托实现

作业要求:

使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。具体要求如下:

  1. 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
  2. 定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
  3. 使用委托 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();
        }
    }
}

小结:

本次作业实现的周黑鸭工厂模拟,主要为了巩固接口与委托的应用.其中的难点有对部分工厂无法实现部分功能的异常处理,使得程序有清晰的错误报告,当程序遇到无法处理的错误时,通过抛出异常,可以立即中断当前的执行流程,并将错误信息传递给上层调用者。这使得错误信息能够清晰地传达给开发者,帮助他们快速定位问题所在。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值