C#实践作业1(类、接口、委托)实现对周黑鸭工厂的产品生产统一管理

一、题目

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

  1. 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
  2. 定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
  3. 使用委托 ProductionDelegate 定义生产委托。
  4. 在 Main 函数中,创建不同工厂的实例,并通过生产委托进行生产。

二、知识点

(ps:具体知识点的学习可以看我的其他博客,应该写了)

2.1接口(Interface)

C#中的接口是一种定义了一组方法的契约或规范,但不提供这些方法的具体实现。此题中接口的作用是为类定义了一个应该遵循的规范或契约。任何实现该接口的类都必须提供接口中定义的所有方法的实现。这有助于确保类之间的一致性,并使得代码更加可预测和可维护。

2.2委托(Delegate)

C# 中的委托是一种类型,它安全地封装了方法的签名和方法的引用。委托特别用于实现回调和事件驱动编程模型。可以直接理解为委托就是定义一件事情任务,比如本题就是“做生产”这件事情。

2.3类

本题就是把做委托这件事的(即被委托人乙方)东西作为类

三、具体步骤

3.1接口定义IProductionFactory接口定义了工厂可能会执行的两个方法:ProduceDuckNeckProduceDuckWing

public interface IProductionFactory//定义接口
{void ProduceDuckNeck();void ProduceDuckWing();
}

3.2工厂实现:每个工厂类(WuhanFactoryNanjingFactoryChangshaFactory)都实现了IProductionFactory接口,并根据具体的生产方法的不同调用不同的接口方法。例如,WuhanFactory可以生产鸭脖和鸭翅,而NanjingFactory只能生产鸭翅。

//定义武汉、南京、长沙三个生产工厂
public class WuhanFactory : IProductionFactory
{public void ProduceDuckNeck(){Console.WriteLine("武汉工厂生产鸭脖");}public void ProduceDuckWing(){Console.WriteLine("武汉工厂生产鸭翅");}
}public class NanjingFactory : IProductionFactory
{public void ProduceDuckNeck(){throw new NotSupportedException("南京工厂不能生产鸭脖");}public void ProduceDuckWing(){Console.WriteLine("南京工厂生产鸭翅");}
}public class ChangshaFactory : IProductionFactory
{public void ProduceDuckNeck(){Console.WriteLine("长沙工厂生产鸭脖");Console.ReadLine();}public void ProduceDuckWing(){throw new NotSupportedException("长沙工厂不能生产鸭翅");}
}

3.3委托定义ProductionDelegate委托类型用于将工厂对象作为参数,并调用其生产方法。这样,委托可以作为生产方法的引用,从而在不同的工厂上执行相同的操作。

public delegate void ProductionDelegate(IProductionFactory factory);//定义生产委托

委托具体做什么:

// 生产鸭脖的委托方法  static void ProduceDuckNeck(IProductionFactory factory){factory.ProduceDuckNeck();}// 生产鸭翅的委托方法  static void ProduceDuckWing(IProductionFactory factory){factory.ProduceDuckWing();}

3.4异常处理:而对于不做某些接口方法的工厂类(例如南京工厂不支持生产鸭脖),则对应的方法会抛出NotSupportedException。在调用这些方法时,代码通过try-catch块捕获并处理这些异常。(本题没有这个要求,这是拓展)

抛出例子:

public void ProduceDuckWing()
{throw new NotSupportedException("长沙工厂不能生产鸭翅");
}

try-catch:

try
{duckneck(nanjingFactory);
}
catch (NotSupportedException ex)
{Console.WriteLine(ex.Message);
}
try
{duckwing(changshaFactory);
}
catch (NotSupportedException ex)
{Console.WriteLine(ex.Message);
}

3.5委托调用:在Main方法中,委托被用来调用工厂的生产方法。将委托指向不同的工厂对象,而无需修改调用代码,就可以在不同的工厂中选择生产鸭脖或者鸭翅。

 // 创建生产委托  ProductionDelegate duckneck = ProduceDuckNeck;ProductionDelegate duckwing = ProduceDuckWing;// 使用委托调用工厂生产鸭脖和鸭翅  duckneck(wuhanFactory);duckwing(wuhanFactory);duckwing(nanjingFactory);duckneck(changshaFactory);

四、完整代码

using System;
namespace ZhouHeiYa
{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(){throw new NotSupportedException("南京工厂不能生产鸭脖");}public void ProduceDuckWing(){Console.WriteLine("南京工厂生产鸭翅");}}public class ChangshaFactory : IProductionFactory{public void ProduceDuckNeck(){Console.WriteLine("长沙工厂生产鸭脖");Console.ReadLine();}public void ProduceDuckWing(){throw new NotSupportedException("长沙工厂不能生产鸭翅");}}public delegate void ProductionDelegate(IProductionFactory factory);//定义生产委托internal class Program{static void Main(string[] args){// 创建不同工厂实例  IProductionFactory wuhanFactory = new WuhanFactory();IProductionFactory nanjingFactory = new NanjingFactory();IProductionFactory changshaFactory = new ChangshaFactory();// 创建生产委托  ProductionDelegate duckneck = ProduceDuckNeck;ProductionDelegate duckwing = ProduceDuckWing;// 使用委托调用工厂生产鸭脖和鸭翅  duckneck(wuhanFactory);duckwing(wuhanFactory);duckwing(nanjingFactory);duckneck(changshaFactory); try{duckneck(nanjingFactory);}catch (NotSupportedException ex){Console.WriteLine(ex.Message);}try{duckwing(changshaFactory);}catch (NotSupportedException ex){Console.WriteLine(ex.Message);}}// 生产鸭脖的委托方法  static void ProduceDuckNeck(IProductionFactory factory){factory.ProduceDuckNeck();}// 生产鸭翅的委托方法  static void ProduceDuckWing(IProductionFactory factory){factory.ProduceDuckWing();}}}

五、结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/616166.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

震惊!借助Coze白嫖GPT4-128k解决方案

震惊!某大佬借助Coze白嫖GPT4-128k解决方案 前言 此文章介绍如何免费使用GPT-4高级模型并拓展API功能 最近的 Coze 在国内开放了,可以免费使用大模型。但是和国外的有点区别,国外版本使用的chatgpt4,国内版本使用的是语雀大模型。 Coze是一…

代码随想录 538. 把二叉搜索树转换为累加树

题目 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下,二叉搜索树满足下列约束条件&a…

Project Euler_Problem 160_Factorial Trailing Digits_费马小定理,威尔逊定理,左右互搏

原题目: 题目大意:1e12的阶乘,不算末尾的0,后5位数字为多少 解题思路: 暴力运算也能算,就是有点慢,优化过后可能也得算个几十分钟 这里考虑使用威尔逊定理费马小定理 用这个方法我们就可以得到…

小区烟火AI检测/楼道杂物堆积消防隐患AI智能识别方案

一、背景需求 据新闻报道,今年4月7日,安徽省合肥市肥东县一民房发生火灾,致1死11伤,起火点是“一楼楼道杂物间”。 因为小区居民楼楼道堆积大量杂物而导致的消防火灾事故也不在少数。楼道堆积杂物是一个长期存在的问题&#xff…

电路设计电容使用误区-不要什么地方都用0.1μF

电路中,电容的主要作用有四种,也就是我们常说的储能,滤波,旁路,去耦。四种电路的应用形式,可以用下图简要表示应用场合。 其中,对于储能我已经多次详细讲过,不妨再重复一次。对于电…

策略者模式(代码实践C++/Java/Python)————设计模式学习笔记

文章目录 1 设计目标2 Java2.1 涉及知识点2.2 实现2.2.1 实现两个接口飞行为和叫行为2.2.2 实现Duck抽象基类(把行为接口作为类成员)2.2.3 实现接口飞行为和叫行为的具体行为2.2.4 具体实现鸭子2.2.5 模型调用 3 C(用到了大量C2.0的知识&…

SAP CAP篇十七:写个ERP的会计系统吧,Part IV

本文目录 本系列文章目标开发步骤数据库表设计借贷初始化数据 会计凭证 Service 定义生成Fiori App更新CDS AnnotationApp运行 本系列文章 SAP CAP篇一: 快速创建一个Service,基于Java的实现 SAP CAP篇二:为Service加上数据库支持 SAP CAP篇三&#xff…

最新Zibll子比主题V7.1版本源码 全新推出开心版

源码下载地址:Zibll子比主题V7.1.zip

顺序表的基本操作

目录 命名规范 顺序表的定义 静态顺序表 动态顺序表 顺序表的基本操作 顺序表的初始化 顺序表的销毁 顺序表的打印 顺序表的容量检查 指定位置插入元素 指定位置删除元素 查找元素 在尾部添加一个元素 删除最后一个元素 在开头添加一个元素 删除首元素 命名规范…

4、jvm-垃圾收集算法与垃圾收集器

垃圾收集算法 分代收集理论 当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。 比如…

AI在运维实践中的价值提升

在2024年的AI赛道上,利用大数据 、机器学习算法、人工智能来改善运维效率已成为软件运营商发展的新主张,通过AI在运维流程的洞察、决策和执行,从而提升效率、减少故障时间,优化用户体验。通过分析大量数据来识别趋势和模式&#x…

海山数据库(He3DB)原理剖析:浅析Doris跨源分析能力

Doris湖仓分析背景: Doris多数据源功能演进 Doris的生态近年来围绕湖仓分析做了较多工作,Doris一直在积极拓宽大数据生态的OLAP分析市场,Doris2.0之后为了满足湖仓分析场景,围绕multi-catalog、数据缓存、容错、pipeline资源管理…