当前位置: 首页 > news >正文

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 xxx.
  • 若是不能生产该产品,则抛出NotImplementedException异常,异常信息为xxx Factory has no access to produce duck xxx.

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

相关文章:

Windows程序设计课程作业-1

文章目录 1. 作业内容2. 设计思路分析与难点3. 代码实现3.1 接口定义3.2 工厂类实现3.3 委托和事件3.4 主函数3.5 代码运行结果 4. 代码地址5. 总结&改进思路6. 阅读参考 1. 作业内容 使用 C# 编码(涉及类、接口、委托等关键知识点),实现…...

2024年河北省网络建设与运维-省赛-nginx 和tomcat 服务服务步骤

题目: 5.nginx 和tomcat 服务 任务描述:利用系统自带tomcat,搭建 Tomcat网站。 (1)配置 linux2 为 nginx 服务器,网站目录为/www/nginx,默认文档 index.html 的内容为“HelloNginx”&#xf…...

CentOS下部署ftp服务

要在linux部署ftp服务首先需要安装vsftpd服务 yum install vsftpd -y 安装完成后需要启动vsftpd服务 systemctl start vsftpd 为了能够访问ftp的端口,需要在防火墙中开启ftp的端口21,否则在使用ftp连接的时候会报错No route to host. 执行如下命令为f…...

伦敦银几点开盘?为什么交易不了?

近期是西方的假期,伦敦银市场因而休市。很多朋友看到之前伦敦银上涨那么厉害,正摩拳擦掌准备入场大展拳脚,然而现在却吃了一个大瘪:怎么我刚准备好大展拳脚,结果却没有开盘呢?到底伦敦银几点开盘&#xff1…...

快手开放平台对接内容管理demo

其中包括用户授权&#xff0c;获取accessToken&#xff0c;获取用户信息&#xff0c;自动上传视频&#xff0c;发布视频&#xff0c;视频列表&#xff0c;删除视频等 <?php namespace app\controller;use app\BaseController; use think\Exception; use think\facade\App;…...

2024年32款数据分析工具分五大类总览

数据分析工具在现代商业和科学中扮演着不可或缺的角色&#xff0c;为组织和个人提供了深入洞察和明智决策的能力。这些工具不仅能够处理大规模的数据集&#xff0c;还能通过强大的分析和可视化功能揭示隐藏在数据背后的模式和趋势。数据分析工具软件主要可以划分为以下五个类别…...

WPS的JS宏如何批量实现文字的超链接

表格中需要对文字进行超链接&#xff0c;每个链接指引到不同的地址。例如&#xff1a; 实现如下表格中&#xff0c;文件名称超级链接到对应的文件路径上&#xff0c;点击对应的文件名称&#xff0c;即可打开对应的文件。 序号文件名称文件路径1变更申请与处理表.xls文档\系统…...

0203逆矩阵-矩阵及其运算-线性代数

文章目录 一、逆矩阵的定义、性质和求法二、逆矩阵的初步应用结语 一、逆矩阵的定义、性质和求法 定义7 对于 n n n阶矩阵A&#xff0c;如果有一个 n n n阶矩阵B&#xff0c;使 A B B A E ABBAE ABBAE 则说矩阵A是可逆的&#xff0c;并把矩阵B称为A的逆矩阵&#xff0c;简称逆…...

加州大学欧文分校英语基础语法专项课程03:Simple Past Tense 学习笔记(完结)

Learn English: Beginning Grammar Specialization Specialization Certificate course 3&#xff1a; Simple Past Tense Course Certificate 本文是学习 https://www.coursera.org/learn/simple-past-tense 这门课的学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。…...

基于Java微信小程序的医院挂号小程序,附源码

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…...

7.网络编程-安全

目录 引言 Session Cookie JWT (JSON Web Token) 网络攻击 CSRF DDoS 其他常见网络攻击类型及应对措施 引言 Session、Cookie 和 JWT 都是Web开发中用于实现用户状态管理和身份验证的技术。它们各自有不同的特点和应用场景&#xff1a; Session Session 是一种服务器…...

信息泄露漏洞的JS整改方案

引言 &#x1f6e1;️ 日常工作中&#xff0c;我们经常会面临线上环境被第三方安全厂商扫描出JS信息泄露漏洞的情况&#xff0c;这给我们的系统安全带来了潜在威胁。但幸运的是&#xff0c;对于这类漏洞的整改并不复杂。本文将介绍几种可行的整改方法&#xff0c;以及其中一种…...

WKWebView的使用

一、简介 在iOS中&#xff0c;WKWebView是WebKit框架提供的一个用于展示网页内容的控件&#xff0c;相比UIWebView有更好的性能和功能。 以下是在iOS中使用WKWebView的基本步骤&#xff1a; 1.1 导入WebKit框架 import WebKit1.2 创建WKWebView实例 let webView WKWebVie…...

iOS MT19937随机数生成,结合AES-CBC加密算法实现。

按处理顺序说明&#xff1a; 1. 生成随机数序列字符串函数 生成方法MT19937&#xff0c;初始种子seed&#xff0c;利用C库方法&#xff0c;生成&#xff1a; #include <random> //C 库头文件引入NSString * JKJMT19937Seed(uint32_t seed) {NSLog("MT19937Seed种…...

阿里云2024年优惠券获取方法及使用教程详解

阿里云是阿里巴巴集团旗下的云计算服务提供商&#xff0c;是全球领先的云计算及人工智能科技公司之一。提供免费试用、云服务器、云数据库、云安全、云企业应用等云计算服务&#xff0c;以及大数据、人工智能服务、精准定制基于场景的行业解决方案。 阿里云2024年优惠券的获取方…...

hadoop中hdfs的fsimage文件与edits文件

hadoop中hdfs的fsimage文件与edits文件的作用 首先&#xff0c;我们抛出fsimage和edits文件的功能描述。 Fsimage文件: HDFS文件系统元数据的一个永久性的检查点&#xff0c;其中包含HDFS文件系统的 所有目录和文件inode的序列化信息。 Edits文件:存放HDFS文件系统的所有更…...

最新版两款不同版SEO超级外链工具PHP源码

可根据个人感觉喜好自行任意选择不同版本使用&#xff08;版V1或版V2&#xff09; 请将zip文件全部解压缩即可访问&#xff01; 源码全部开源&#xff0c;支持上传二级目录访问 已更新增加大量高质量外链&#xff08;若需要增加修改其他外链请打开txt文件&#xff09;修复优…...

.net框架和c#程序设计第二次测试

一、实验内容 1、设计一个用户登录页面webform1.aspx&#xff0c;效果如下图所示&#xff1a; 2、点击webform1.aspx中“还未注册”连接进入register.aspx&#xff0c;注册页面效果如下图所示&#xff1a;点击用户注册信息到usershow.aspx页面&#xff0c;并显示注册的用户信息…...

芒果YOLOv8改进组合157:动态标签分配ATSS+新颖高效AsDDet检测头组合改进,共同助力VisDrone涨点1.8%,小目标高效涨点

💡本篇内容:【芒果YOLOv8改进ATSS标签分配策略|第三集】芒果YOLOv8改进组合157:动态标签分配ATSS+新颖高效AsDDet检测头组合改进,共同助力VisDrone涨点1.8%,小目标高效涨点 💡🚀🚀🚀本博客 标签分配策略ATSS改进+ 新颖高效AsDDet检测头组合改进,适用于 YOLOv8 …...

自媒体内容创作助手:7款必备ai写作工具一览! #学习方法#科技#其他

这些工具不仅可以快速生成高质量的文本内容&#xff0c;还可以根据用户的需求进行个性化定制。它们可以帮助我们节省大量的时间和精力&#xff0c;让我们更加专注于创意和细节的打磨。本文将为大家详细介绍几个AI写作工具&#xff0c;让你在写作领域更上一层楼。 1.七燕写作 这…...

保姆级教程:在IMX6ULL开发板上手把手实现红外遥控器驱动(基于NEC协议与Linux 5.x内核)

从零构建IMX6ULL红外遥控驱动&#xff1a;NEC协议全解析与Linux 5.x实战指南 当你想在嵌入式设备上实现红外遥控功能时&#xff0c;NEC协议驱动的开发往往是第一个需要攻克的堡垒。本文将带你深入理解红外通信原理&#xff0c;并手把手完成从硬件连接到驱动测试的全流程。不同于…...

智能视觉组的比赛方案建议

简 介&#xff1a; 【智能视觉组比赛评分改进建议】针对不同比赛地图导致成绩评判不公的问题&#xff0c;建议赛前准备多张固定地图并测算标准时间&#xff1a;1&#xff09;由官方测试每张地图的理论最优时间和实际小车运行时间&#xff1b;2&#xff09;比赛成绩以选手用时与…...

在Windows上轻松安装APK文件:APK Installer完全指南

在Windows上轻松安装APK文件&#xff1a;APK Installer完全指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾想过在Windows电脑上直接运行Android应用&…...

成本数据多系统自动采集与分析实操指南:基于2026大模型Agent的超自动化实践

在2026年的数字化转型深水区&#xff0c;企业对于“成本”的理解已从静态的财务报表演进为实时的流式数据。然而&#xff0c;即便是在大模型技术全面爆发的今天&#xff0c;数据孤岛依然是阻碍成本精细化管理的首要顽疾。成本数据往往碎片化分布在ERP、MES、WMS、供应链平台及各…...

物联网设备网络无缝切换与多网融合:exnetif模块实战指南

1. 项目概述&#xff1a;为什么我们需要exnetif&#xff1f; 在物联网项目的实际开发中&#xff0c;我遇到过太多因为网络环境不稳定而导致的“玄学”问题。比如&#xff0c;一个部署在工厂车间的智能网关&#xff0c;原本通过稳定的有线以太网连接云端&#xff0c;一旦生产线调…...

利用 Taotoken 多模型能力为 AIGC 应用构建降级容灾方案

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 利用 Taotoken 多模型能力为 AIGC 应用构建降级容灾方案 当你的 AIGC 应用从内部测试走向面向真实用户的生产环境时&#xff0c;服…...

SFT别急着接RL!你的多模态大模型可能一直在“带伤训练”

PRISM团队 投稿量子位 | 公众号 QbitAISFT之后&#xff0c;直接上强化学习就够了吗&#xff1f;小心&#xff0c;你做的可能不是“训练”&#xff0c;而是“还债”。在多模态大模型&#xff08;MLLM&#xff09;的后训练中&#xff0c;行业内长期遵循着一个看似天经地义的范式&…...

FigmaCN:设计师的终极中文界面解决方案

FigmaCN&#xff1a;设计师的终极中文界面解决方案 【免费下载链接】figmaCN 中文 Figma 插件&#xff0c;设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的全英文界面而苦恼吗&#xff1f;FigmaCN是专为中文用户打造的专业级本地…...

RK3588核心板赋能无人机智能飞控:异构计算与AI视觉实践

1. 项目概述&#xff1a;当高性能核心板遇上无人机最近在折腾一个挺有意思的项目&#xff0c;核心是把一块高性能的核心板——迅为的RK3588&#xff0c;塞进无人机里&#xff0c;让它成为飞控大脑。这听起来可能有点“大材小用”&#xff0c;毕竟RK3588这玩意儿算力不低&#x…...

西门子PLC通信必备:手把手教你用SCL编写Modbus RTU CRC校验功能块

西门子PLC通信实战&#xff1a;SCL实现Modbus RTU CRC校验的工程化解决方案 在工业自动化领域&#xff0c;可靠的数据通信如同设备的神经系统。当两台PLC需要通过RS485接口交换温度传感器读数时&#xff0c;Modbus RTU协议因其简洁高效成为首选。但许多工程师在调试阶段都会遇到…...