Windows程序设计课程作业-1

文章目录

  • 1. 作业内容
  • 2. 设计思路分析与难点
  • 3. 代码实现
    • 3.1 接口定义
    • 3.2 工厂类实现
    • 3.3 委托和事件
    • 3.4 主函数
    • 3.5 代码运行结果
  • 4. 代码地址
  • 5. 总结&改进思路
  • 6. 阅读参考


1. 作业内容

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

  • 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
  • 定义类 WuhanFactoryNanjingFactoryChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
  • 使用委托 ProductionDelegate 定义生产委托。
  • Main 函数中,创建不同工厂的实例,并通过生产委托进行生产。

2. 设计思路分析与难点

  在面向对象编程中,接口定义了方法的规范,委托则允许在运行时选择具体的方法执行,这两者同时使用,使得不同的工厂类可以根据需要实现这些方法,增强了程序的灵活性和扩展性,提高了代码的动态性。总体上讲,该系统的设计围绕接口和委托展开。
  如何处理工厂生产能力的差异性是一个较为棘手的问题,例如,南京工厂无法生产鸭翅。我们需要一种机制来优雅地处理不支持的生产操作。
  我们利用接口方法的实现来体现生产能力的差异性,在不支持的方法中抛出NotImplementedException异常。这确保了程序在尝试执行不支持的操作时会清楚地报错,使得错误处理更加明确。
  如图所示:

  在这里只是简单地抛出异常并且报错,并不去继续其他处理。

3. 代码实现

3.1 接口定义

interface IProductionFactory
{
void ProduceNeck();
void ProduceWing();
}

  IProductionFactory包含两个方法:ProduceNeck() ProduceWing()。这两个方法分别代表生产鸭脖和鸭翅的能力。

3.2 工厂类实现

class WuhanFactory : IProductionFactory
{public void ProduceNeck() {Console.WriteLine("Wuhan Factory produce duck neck.");}public void ProduceWing() {Console.WriteLine("Wuhan Factory produce duck wing.");}
}
class NanjingFactory : IProductionFactory
{public void ProduceNeck(){Console.WriteLine("Nanjing Factory produce duck neck.");}public void ProduceWing(){throw new NotImplementedException("Nanjing Factory has no access to produce duck wing!!!");}
}
class ChangshaFactory : IProductionFactory
{public void ProduceNeck(){throw new NotImplementedException("Changsha Factory has no access to produce duck neck!!!");}public void ProduceWing(){Console.WriteLine("Changsha Factory produce duck wing.");}
}

  在这里,我们创建了三个工厂类:WuhanFactoryNanjingFactoryChangshaFactory,每个类都实现了 IProductionFactory 接口。由于不同工厂能够生产的产品不同,我们通过用不同方式实现接口方法来体现他们在生产上的差异:

  • 若是能够实现生产该类产品,则正常输出语句xxx Factory produce duck wing.
  • 若是不能生产该产品,则抛出NotImplementedException异常,异常信息为xxx Factory produce duck neck.

3.3 委托和事件

//定义委托
public delegate void ProductionDelegate();//定义事件
public event ProductionDelegate ExecuteOrder;

  我们定义了一个名为ProductionDelegate的委托,它不带参数且不返回值,用于封装生产方法的调用,并且定义了事件ExecuteOrder,用于记录实现各个工厂的方法。

3.4 主函数

  在 Main 方法中,我们为每个工厂实例化了相应的生产委托,并通过这些委托调用生产方法。

static void Main(string[] args)
{//分别为三个工厂类实例化IProductionFactory Wuhan_Factory = new WuhanFactory();IProductionFactory Nanjing_Factory = new NanjingFactory();IProductionFactory Changsha_Factory = new ChangshaFactory();//为每一个工厂都创建一个单独的委托ProductionDelegate wuhanProduction = Wuhan_Factory.ProduceNeck;wuhanProduction += Wuhan_Factory.ProduceWing;ProductionDelegate nanjingProduction = Nanjing_Factory.ProduceNeck;nanjingProduction += Nanjing_Factory.ProduceWing;ProductionDelegate changshaProduction = Changsha_Factory.ProduceWing;changshaProduction += Changsha_Factory.ProduceNeck;Console.WriteLine("Wuhan Factory production:");try{wuhanProduction();}catch (NotImplementedException e){Console.WriteLine(e.Message);}Console.WriteLine("Nanjing Factory production:");try{nanjingProduction();}catch (NotImplementedException e){Console.WriteLine(e.Message);}Console.WriteLine("Changsha Factory production:");try{changshaProduction();}catch (NotImplementedException e){Console.WriteLine(e.Message);}Console.ReadLine();}

  除此之外,还采用trycatch语句块来实现订单的执行,对于每个工厂的委托,都使用了一个try-catch语句块,能够在出现异常的时候及时抛出,并且不影响其他工厂的生产。

3.5 代码运行结果

4. 代码地址

  代码仓库:https://github.com/hmcy-zbx/Windows_homework

5. 总结&改进思路

  通过本次项目的练习,我们展示了如何使用 C# 中的面向对象特性来构建一个简单的实现周黑鸭多工厂生产管理系统。该系统不仅展示了接口、类和委托的使用,还体现了面向对象设计原则继承性的应用,是一次很好的练习。
  在未来,还可以使用设计模式对其进行改进,利用简单工厂模式或者抽象工厂模式来实现可以使其更加接近实际生产的需求。

6. 阅读参考

  C#教程-接口:csharp-interface
  C#教程-委托:BV1TP411R72r
  C#教程-事件:BV1ou411a7YD
  简单工厂模式和抽象工厂模式:Graphic Design Patterns

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

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

相关文章

网络协议——VRRP(虚拟路由冗余协议)原理与配置

1. VRRP概述 单网关出现故障后下联业务中断,配置两个及以上的网关时由于IP地址冲突,导致通讯时断时续甚至通信中断。VRRP组播类的网络层协议 2. 协议版本 VRRP v2: 支持认证,仅适用于IPv4网络 VRRP v3: 不支持认证, 适用于IPv4和IPv6两种网…

Revit 2025新功能一览~

Hello大家好!我是九哥~ Revit2025已经更新,安装后,简单试了下,还是挺不错的,流畅度啊,新功能啊,看来还是有听取用户意见的,接下来就简单看看都有哪些新功能。 好了,今天的…

【大数据存储】实验七 Spark RDD

Spark RDD操作实验 一、实验目的 (1)掌握使用Spark访问本地文件和HDFS文件的方法 (2)熟练掌握在Spark Shell中对Spark RDD的操作方法 (3)掌握Spark应用程序的编写、编译打包和运行方法 二、.实验平台 …

【学习笔记】java项目—苍穹外卖day09

文章目录 用户端历史订单模块1. 查询历史订单1.1 需求分析和设计1.2 代码实现1.2.1 user/OrderController1.2.2 OrderService1.2.3 OrderServiceImpl1.2.4 OrderMapper1.2.5 OrderMapper.xml1.2.6 OrderDetailMapper 1.3 功能测试 2. 查询订单详情2.1 需求分析和设计2.2 代码实…

解锁未来:大模型GPT的应用架构与创新实践

在人工智能的黄金时代,大模型如GPT(Generative Pre-trained Transformer)已成为技术创新和应用发展的前沿。它不仅重新定义了人机交互的方式,还在多个领域内展现出了巨大的应用潜力。本文将深入探讨大模型GPT的应用架构&#xff0…

时序预测 | Matlab实现SOM-BP自组织映射结合BP神经网络时间序列预测

时序预测 | Matlab实现SOM-BP自组织映射结合BP神经网络时间序列预测 目录 时序预测 | Matlab实现SOM-BP自组织映射结合BP神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现SOM-BP自组织映射结合BP神经网络时间序列预测(完整源码…

微软文本转语音和语音转文本功能更新,效果显著!

今天我要和大家分享一个新功能更新——微软的文本转语音和语音转文本功能。最近,微软对其AI语音识别和语音合成技术进行了重大升级,效果非常好,现在我将分别为大家介绍这两个功能。 先来听下这个效果吧 微软文本转语音和语音转文本功能更新 …

绿联 安装YesPlayMusic,一款高颜值的第三方网易云播放器

绿联 安装YesPlayMusic,一款高颜值的第三方网易云播放器 1、镜像 fogforest/yesplaymusic:latest 2、安装 2.1、基础设置 重启策略:容器退出时总是重启容器。 2.2、网络 桥接即可。 2.3、端口设置 容器端口80,不可变更; 本…

计算机网络(四) 网络层

网络层 一、网络层的功能1.异构网络互连2.路由与转发3.SDN的基本概念4.拥塞控制 二、路由算法1.静态路由和动态路由2.距离-向量路由算法3.链路状态路由算法4.层次路由 三、IPv41.IPv4分组2.IPv4地址与NAT3.子网划分与子网掩码、CIDR4.ARP、DHCP与ICMP 四、IPv61.IPv6特点2.IPv6…

WordPress建站教程:10步快速搭建个人网站

WordPress是一个广泛使用的内容管理系统(CMS),凭借其用户友好的界面和大量可定制的主题和插件,为WordPress 提供了多功能性和灵活性,可用于创建各种类型的网站,包括个人博客、B2B企业网站、B2C外贸网站等&a…

SSM学习——Spring JDBC

Spring JDBC 概念 Spring的JDBC模块负责数据库资源管理和错误处理,简化了开发人员对数据库的操作。 Spring JDBC通过配置数据源和JDBC模板来配置。 针对数据库操作,Spring框架提供了JdbcTemplate类,它是Spring框架数据抽象层的基础&#…

的C++奇迹之旅:值和引用的本质效率与性能比较

文章目录 请添加图片描述 [TOC](文章目录) 📝引用# 🌠引用概念**引用**不是新定义一个变量,而是给**已存在变量取了一个别名**,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。>定义&#…

ArcGIS 10.8中文版详细安装教程(附安装包)

ArcGIS 10.8中文版详细安装教程(附安装包) 关键词:ArcGIS 10.8中文版安装 1.概述 ArcGIS Desktop 10.8中文版是由ESRI公司开发的一款专业的地理信息系统,一套完整的桌面GIS软件套件,它包含ArcMap、ArcCatalog、ArcG…

C++——模板初阶

泛型编程 C语言中交换两个变量数据的内容一般是这样实现的 #include<iostream>using namespace std;void swap(int* x, int* y) {int tmp *x;*x *y;*y tmp; } int main() {int x 5;int y 7;swap(&x,&y);cout << "x" << x << …

最优算法100例之30-表示数值的字符串

专栏主页&#xff1a;计算机专业基础知识总结&#xff08;适用于期末复习考研刷题求职面试&#xff09;系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 请实现一个函数用来判断字符串是否表示数值&#xff08;包括整数和小数&#xff09;。例如&a…

基于ArrayList实现简单洗牌

前言 在之前的那篇文章中&#xff0c;我们已经认识了顺序表—>http://t.csdnimg.cn/2I3fE 基于此&#xff0c;便好理解ArrayList和后面的洗牌游戏了。 什么是ArrayList? ArrayList底层是一段连续的空间&#xff0c;并且可以动态扩容&#xff0c;是一个动态类型的顺序表&…

Java方法的参数传递机制与递归总结

文章目录 1、方法的参数传递机制1.1、形参和实参1.2、 参数传递机制&#xff1a;值传递1.3、 举例1.4 练习 2、 递归(recursion)方法 1、方法的参数传递机制 1.1、形参和实参 若方法含有参数&#xff1a; 形参&#xff08;formal parameter&#xff09;&#xff1a;在定义方…

QT背景介绍

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、QT背景 1.1什么是QT 1.2QT的发展历史 1.3什么是框架、库 1.4QT支持的平台 1.5QT的优点 1.6QT的…

BIM转Power BI数据集

在本博客中&#xff0c;我们将了解如何使用从 SSAS 表格、Power BI Desktop 或 Power BI 服务数据集中提取的 Model.bim 文件在本地或 PBI 服务上生成新数据集。 1、设置&#xff08;SSAS 表格和 PBI 服务通用&#xff09; 我建议你创建一个专门用于此任务的新 Python 环境&a…

old photo老照片图像复原数据集

来源 本来想拿DA-CLIP 训练一下old photo&#xff0c;训练代码没成功&#xff0c;毕设没时间就不研究了 github搜old photo复原论文原作者好像没开源训练数据集&#xff0c;所以用了这个SynOld 训练集500对测试集200对 但是readme写的很差&#xff0c;其他什么也没交代 展示…