Windows程序设计课程作业-1
文章目录
- 1. 作业内容
- 2. 设计思路分析与难点
- 3. 代码实现
- 3.1 接口定义
- 3.2 工厂类实现
- 3.3 委托和事件
- 3.4 主函数
- 3.5 代码运行结果
- 4. 代码地址
- 5. 总结&改进思路
- 6. 阅读参考
1. 作业内容
使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。具体要求如下:
- 定义接口
IProductionFactory
,包含生产鸭脖和鸭翅的方法。 - 定义类
WuhanFactory
、NanjingFactory
、ChangshaFactory
分别实现接口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.");}
}
在这里,我们创建了三个工厂类:WuhanFactory
、NanjingFactory
和 ChangshaFactory
,每个类都实现了 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();}
除此之外,还采用try
和catch
语句块来实现订单的执行,对于每个工厂的委托,都使用了一个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”…...

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

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

快手开放平台对接内容管理demo
其中包括用户授权,获取accessToken,获取用户信息,自动上传视频,发布视频,视频列表,删除视频等 <?php namespace app\controller;use app\BaseController; use think\Exception; use think\facade\App;…...

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

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

0203逆矩阵-矩阵及其运算-线性代数
文章目录 一、逆矩阵的定义、性质和求法二、逆矩阵的初步应用结语 一、逆矩阵的定义、性质和求法 定义7 对于 n n n阶矩阵A,如果有一个 n n n阶矩阵B,使 A B B A E ABBAE ABBAE 则说矩阵A是可逆的,并把矩阵B称为A的逆矩阵,简称逆…...

加州大学欧文分校英语基础语法专项课程03:Simple Past Tense 学习笔记(完结)
Learn English: Beginning Grammar Specialization Specialization Certificate course 3: Simple Past Tense Course Certificate 本文是学习 https://www.coursera.org/learn/simple-past-tense 这门课的学习笔记,如有侵权,请联系删除。…...

基于Java微信小程序的医院挂号小程序,附源码
博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇dz…...

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

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

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

iOS MT19937随机数生成,结合AES-CBC加密算法实现。
按处理顺序说明: 1. 生成随机数序列字符串函数 生成方法MT19937,初始种子seed,利用C库方法,生成: #include <random> //C 库头文件引入NSString * JKJMT19937Seed(uint32_t seed) {NSLog("MT19937Seed种…...

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

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

最新版两款不同版SEO超级外链工具PHP源码
可根据个人感觉喜好自行任意选择不同版本使用(版V1或版V2) 请将zip文件全部解压缩即可访问! 源码全部开源,支持上传二级目录访问 已更新增加大量高质量外链(若需要增加修改其他外链请打开txt文件)修复优…...

.net框架和c#程序设计第二次测试
一、实验内容 1、设计一个用户登录页面webform1.aspx,效果如下图所示: 2、点击webform1.aspx中“还未注册”连接进入register.aspx,注册页面效果如下图所示:点击用户注册信息到usershow.aspx页面,并显示注册的用户信息…...

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

自媒体内容创作助手:7款必备ai写作工具一览! #学习方法#科技#其他
这些工具不仅可以快速生成高质量的文本内容,还可以根据用户的需求进行个性化定制。它们可以帮助我们节省大量的时间和精力,让我们更加专注于创意和细节的打磨。本文将为大家详细介绍几个AI写作工具,让你在写作领域更上一层楼。 1.七燕写作 这…...

文心一言 vs GPT-4 -- 全面横向比较
文心一言和GPT-4都是当前非常先进的自然语言处理模型,它们在语言理解、生成和翻译等方面都展现出了出色的能力。以下是对这两个模型的全面横向比较: 核心技术基础: 文心一言:是基于BERT(Bidirectional Encoder Repre…...

Leetcode C语言习题
Leetcode习题27:移除元素 题目: 说明: 示例: 题解: 方法一:(开辟额外的数组空间) 我们可以创建一个新的数组,然后用循环来遍历原数组,将原数组中不为 val…...

比 Nest.js 更优雅的 TS 控制反转策略 - 依赖查找
一、Cabloy5.0 内测预告 Cabloy5.0 采用 TS 对整个全栈框架进行了脱胎换骨般的大重构,并且提供了更加优雅的 ts 控制反转策略,让我们的业务开发更加快捷顺畅 1. 新旧技术栈对比: 后端前端旧版js、egg2.0、mysqljs、vue2、framework7新版ts…...

java算法day43 | 动态规划part05 ● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零
1049. 最后一块石头的重量 II 核心思想: 尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,这样就化解成01背包问题了。 是不是感觉和昨天讲解的416. 分割等和子集 (opens new window)非常像了。那么分成两堆石头,一堆石头的…...

STM32无刷电机全套开发资料(源码、原理图、PCB工程及说明文档)
目录 1、原理图、PCB、BOOM表 2、设计描述 2.1 前言 2.2 设计电路规范 3、代码 4、资料清单 资料下载地址:STM32无刷电机全套开发资料(源码、原理图、PCB工程及说明文档) 1、原理图、PCB、BOOM表 2、设计描述 2.1 前言 经过一个星期的画PCB,今…...

工地安全监测识别摄像机
工地安全监测识别摄像机是一种在建筑工地和施工现场广泛使用的智能监控设备,主要用于监测施工过程中可能出现的安全隐患和违规行为,以确保工地人员和设备的安全。通过高清摄像头、智能算法和远程监控系统的结合,该摄像机可以实时监测工地各个…...

【零基础学数据结构】顺序表实现书籍存储
目录 书籍存储的实现规划 编辑 前置准备: 书籍结构体: 书籍展示的初始化和文件加载 书籍展示的销毁和文件保存 书籍展示的容量检查 书籍展示的尾插实现 书籍展示的书籍增加 书籍展示的书籍打印 书籍删除展示数据 书籍展示修改数据 在指定位置之前…...

【智能算法】黑寡妇优化算法(BWO)原理及实现
目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2020年,V Hayyolalam等人受到自然界黑寡妇交配行为启发,提出了黑寡妇优化算法(Black Widow Optimization Agorithm, BWO)。 2.算法原理 2.1算法思想…...

C#-非托管代码
非托管代码是指不受.NET运行时(CLR)的管理和控制,而是直接由操作系统或其他本机执行环境(如C/C编译的代码)所执行的代码。以下是一些常见的非托管代码的例子: C/C代码:通过使用C或C等编程语言编…...

计算机视觉之三维重建(7)---多视图几何(下)
文章目录 一、透视结构恢复问题1.1 概述1.2 透视结构恢复歧义1.3 代数方法1.4 捆绑调整 二、P3P问题三、随机采样一致性 一、透视结构恢复问题 1.1 概述 1. 透视结构恢复问题:摄像机为透视相机,内外参数均未知。 2. 问题:已知 n n n 个三维…...