首页 > 系统相关 >Windows程序设计作业1-周黑鸭工厂

Windows程序设计作业1-周黑鸭工厂

时间:2024-04-09 17:32:04浏览次数:26  
标签:Console Windows void 周黑 接口 工厂 WriteLine 程序设计 public

 一.作业内容

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

        具体要求如下:

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

二.关键要点理解

2.1接口

        在C#中,接口(Interface)是一种定义了一组方法、属性和事件的引用类型。接口提供了一种合约,规定了类或结构体必须实现的成员,但不提供这些成员的具体实现。接口可以被类或结构体实现,使得它们能够提供所规定的功能。

        接下来我们看一个简单的例子理解一下。

  • 接口的定义:使用interface关键词定义
// 定义接口
interface IShape
{
    double CalculateArea();
}
  • 实现接口的类:该接口提供了一个名为 Rectangle 的类,实现了 IShape 接口,内部包含了对计算面积的公式的定义。
// 实现接口的类
class Rectangle : IShape
{
    public double Width { get; set; }
    public double Height { get; set; }

    public Rectangle(double width, double height)
    {
        Width = width;
        Height = height;
    }

    // 实现接口方法
    public double CalculateArea()
    {
        return Width * Height;
    }
}
  • 主程序:创建实现接口的对象,并用对象调用相应的接口方法
// 主程序入口
class Program
{
    static void Main(string[] args)
    {
        // 创建实现了接口的对象
        Rectangle rectangle = new Rectangle(5.0, 3.0);

        // 调用接口方法
        double area = rectangle.CalculateArea();

        Console.WriteLine($"矩形的面积为:{area}"); // 输出矩形的面积
    }
}
  • 运行结果

总的来说,接口提供了一种规范和约束,定义了类应该具备的行为和功能,同时支持多态、代码重用等重要的面向对象编程原则。使用接口可以增强代码的可扩展性、可维护性和可测试性,使得程序更加灵活和易于扩展。

2.2委托

       在 C# 中,委托(Delegate)是一种类型,它允许将方法作为参数传递给其他方法,或者允许将方法存储在数据结构中。简单来说,委托可以看作是方法的引用。

  • 定义委托:实现两个数相加
// 定义一个委托类型,它接受两个整数参数并返回一个整数
delegate int Calculation(int a, int b);
  • 委托的创建
class Program
{
    static void Main(string[] args)
    {
        // 创建委托实例并指向加法方法
        Calculation add = Add;
        // 调用委托实例,传递两个整数参数,并输出结果
        Console.WriteLine("Addition result: " + add(5, 3));
    }

    // 加法方法
    static int Add(int a, int b)
    {
        return a + b;
    }
}
  • 运行结果:

总的来说,委托是 C# 中一种强大的功能,它提供了一种灵活的方式来处理方法调用和事件处理,使得代码更加模块化、可扩展和可维护。

三.回归本题:代码实现

3.1定义接口

定义接口IProductionFactory

使用interface定义接口,包含生产鸭脖鸭翅的方法。

public interface IProductionFactory
{
    void DuckNeckProduction();
    void DuckWingProduction();
}

3.2定义类

定义类 WuhanFactory、NanjingFactory、ChangshaFactory实现接口功能,不同的工厂对应生产不同的产品。

3.2.1定义武汉工厂

class WuhanFactory : IProductionFactory
{
    //武汉工厂既可以生产鸭脖又可以生产鸭翅
    public void DuckNeckProduction()
    {
        Console.WriteLine("WuhanFactory produces duck necks.");
    }
    public void DuckWingProduction()
    {
        Console.WriteLine("WuhanFactory produces duck wings.");
    }
}

3.2.2定义南京工厂

class NanjingFactory : IProductionFactory
{
    //南京工厂只生产鸭翅
    public void DuckNeckProduction()
    {
        Console.WriteLine("NanjingFactory does not produce duck necks.");
    }
    public void DuckWingProduction()
    {
        Console.WriteLine("NanjingFactory produces duck wings.");
    }
}

3.2.3定义长沙工厂

class ChanngshaFactory : IProductionFactory
{
    //长沙工厂只生产鸭脖
    public void DuckNeckProduction()
    {
        Console.WriteLine("ChangshaFactory produces duck necks.");
    }
    public void DuckWingProduction()
    {
        Console.WriteLine("ChangshaFactory does not produce duck wings.");
    }
}

3.3定义委托

通过委托的方式可以在不直接调用方法的情况下引用方法,从而实现不同工厂的不同生产功能,具体的委托使用会在接下来的Main函数中体现。

//定义ProductionDelegate
public delegate void ProductionDelegate();

3.4Main函数的调用

在主函数中,我们将创建不同工厂的实例,然后利用委托指向对应的生产方法,接下来是实现的步骤。

3.4.1创建工厂实例

IProductionFactory wuhanfactory = new WuhanFactory();//武汉工厂
IProductionFactory nanjingfactory = new NanjingFactory();//南京工厂
IProductionFactory changshafactory = new ChanngshaFactory();//长沙工厂

3.4.2创建生产委托

//武汉工厂
ProductionDelegate wuhanproductionDelegate = wuhanfactory.DuckNeckProduction;
wuhanproductionDelegate += wuhanfactory.DuckWingProduction;
//南京工厂
ProductionDelegate nanjingproductionDelegate = nanjingfactory.DuckNeckProduction;
nanjingproductionDelegate += nanjingfactory.DuckWingProduction;
//长沙工厂
ProductionDelegate changshaproductionDelegate = changshafactory.DuckNeckProduction;
changshaproductionDelegate += changshafactory.DuckWingProduction;

3.4.3通过委托进行生产

使用委托实例调用方法。

//武汉工厂
Console.WriteLine("WuhanFactory:");
wuhanproductionDelegate();
//南京工厂
Console.WriteLine("NanjngFactory:");
nanjingproductionDelegate();
//长沙工厂
Console.WriteLine("ChangshaFactory:");
changshaproductionDelegate();

3.5完整代码展示

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Factory
{
    public interface IProductionFactory
    {
        void DuckNeckProduction();
        void DuckWingProduction();
    }

    class WuhanFactory : IProductionFactory
    {
        //武汉工厂既生产鸭脖又生产鸭翅
        public void DuckNeckProduction()
        {
            Console.WriteLine("WuhanFactory produces duck necks.");
        }
        public void DuckWingProduction()
        {
            Console.WriteLine("WuhanFactory produces duck wings.");
        }
    }


    class NanjingFactory : IProductionFactory
    {
        //南京工厂只生产鸭翅
        public void DuckNeckProduction()
        {
            Console.WriteLine("NanjingFactory does not produce duck necks.");
        }
        public void DuckWingProduction()
        {
            Console.WriteLine("NanjingFactory produces duck wings.");
        }
    }

    class ChanngshaFactory : IProductionFactory
    {
        //长沙工厂只生产鸭脖
        public void DuckNeckProduction()
        {
            Console.WriteLine("ChangshaFactory produces duck necks.");
        }
        public void DuckWingProduction()
        {
            Console.WriteLine("ChangshaFactory does not produce duck wings.");
        }
    }

    internal class Factory
    {
        //定义ProductionDelegate
        public delegate void ProductionDelegate();

        static void Main(string[] args)
        {
            //创建不同的工厂实例
            IProductionFactory wuhanfactory = new WuhanFactory();
            IProductionFactory nanjingfactory = new NanjingFactory();
            IProductionFactory changshafactory = new ChanngshaFactory();

            //创建不同的生产委托
            //武汉工厂
            ProductionDelegate wuhanproductionDelegate = wuhanfactory.DuckNeckProduction;
            wuhanproductionDelegate += wuhanfactory.DuckWingProduction;
            //南京工厂
            ProductionDelegate nanjingproductionDelegate = nanjingfactory.DuckNeckProduction;
            nanjingproductionDelegate += nanjingfactory.DuckWingProduction;
            //长沙工厂
            ProductionDelegate changshaproductionDelegate = changshafactory.DuckNeckProduction;
            changshaproductionDelegate += changshafactory.DuckWingProduction;

            //通过生产委托进行生产
            //武汉工厂
            Console.WriteLine("WuhanFactory:");
            wuhanproductionDelegate();
            //南京工厂
            Console.WriteLine("NanjngFactory:");
            nanjingproductionDelegate();
            //长沙工厂
            Console.WriteLine("ChangshaFactory:");
            changshaproductionDelegate();

            Console.ReadLine();
        }
    }
}

四.运行结果

五.总结

       本次作业首先需要充分理解接口和委托,需要理解接口是什么,如何在类中实现接口定义的方法,委托是什么以及如何定义和使用委托来实现方法的动态调用。

       此次作业难点在于:如何合理得使用类和接口设计好各个工厂类的结构,确保它们能够正确地实现接口定义的方法,并且能够通过委托进行统一的生产管理。

标签:Console,Windows,void,周黑,接口,工厂,WriteLine,程序设计,public
From: https://blog.csdn.net/m0_74154005/article/details/137556016

相关文章

  • 关于Windows 10或11睡眠和休眠的知识,看这篇文章就差不多了
    序言Windows提供了几个选项,用于在不使用PC时节省电源。这些选项包括睡眠、休眠和混合睡眠,如果你有笔记本电脑,这些选项特别有用。下面是它们在Windows10和Windows11上的区别。睡眠与休眠睡眠模式和休眠完成相似的事情,但有几个重要的区别。睡眠模式是一种节能状态,类似于暂......
  • 【攻防实操系列+域渗透】--安装域控(Windows-Server-2008-R2-x64)教程
    1.创建windows2008R2虚拟机选完全安装。第一个是标准版功能很少。不建议选。另外两个任意选。我选的是Enterprse企业版。❗❗❗注意:需要提前了解域控的密码复杂度规则。密码一定要自己记住!!!密码①可以看到界面非常小,不方便操作。❗❗❗需要安装vm......
  • Windows操作系统重启后自动挂载NAS服务配置
    基础环境NFS服务端:CentOS7NFS客户端:WindwosServer2012R2NAS服务端在CentOS上安装NFS服务,用NFS实现NAS服务。配置共享路径。示例服务器IP:192.168.178.211示例共享路径:/home/ws/tool/NAS/NFS/shard_nNAS客户端第1步,WindowsServer点击“服务器管理器”图标第2步,点......
  • windows安装python环境搭建
    1、浏览器搜索python,这里点击官方 2、点击Downloads3.下载最新版 4、下载后的安装包5、下一步下一步傻瓜式安装6、可以使用自带的IDLE编辑器开发,点击电脑开始键找到如下圈红处点击打开 7、可以更改编辑器字体 ......
  • Windows Server之KMS
    KMS是什么?KMS全称是KeyManagementService,本身就是微软官方提供的一种激活方式,通常用于大型组织客需要激活的客户端数量不固定的情况。正常情况下,激活Windows系统需要电脑通过网络连接微软服务器,由微软服务器验证你的Key是否可以激活,返回激活成功或激活失败两种结果。而KMS......
  • DISM(Deployment Image Servicing and Management)工具可以用于修复损坏的 Windows 映像
    DISM(DeploymentImageServicingandManagement)工具可以用于修复损坏的Windows映像文件(通常是WIM或VHD文件),以及损坏的系统文件。DISM工具通常用于修复Windows安装映像或运行中的操作系统。您可以使用DISM工具来扫描和修复损坏的系统文件,方法如下:打开命令提示符:......
  • windows消息机制--1基本概念解释
    基本概念解释我们在编写标准C程序的时候,经常会调用各种库函数来辅助完成某些功能:初学者使用得最多的C库函数就是printf了,这些库函数是由你所使用的编译器厂商提供的。在Windows平台下,也有类似的函数可供调用:不同的是,这些函数是由Windows操作系统本身提供的。1)SDK和APISD......
  • 【SVN】windows SVN安装使用教程(服务器4.3.4版本/客户端1.11.0版本)
    原文地址:https://blog.csdn.net/weixin_60387745/article/details/130323395目录一、SVN的一些概念1、什么是SVN?2、SVN的作用是什么?为什么要用SVN?二、VisualSVNServer服务端–服务器搭建和使用1、官网下载VisualSVNServer服务端步骤:1、下载和搭建SVN服务器 2、建立用......
  • 在Windows中用RailDrive挂载WebDAV网盘
    摘要RailDrive官网:https://www.raidrive.com/用RailDrive能把WebDAV网盘挂载成和本地硬盘一样。示例登入NextCloud后,在“文件”模块的左下角,有“文件设置”4个字:点击后,在对话框底部能得到我们需要的URL:在Windows11中安装完RailDrive后,屏幕托盘区有图标:在上图点“添加”......
  • Windows:IntelliJ IDEA Ultimate 安装 PHP 插件
    在IntelliJIDEAUltimate中安装PHP插件,支持PHP开发调试首先,进入File>Setting:再次选择Plugins,然后选择上面的Marketplace。在搜索栏中输入PHP,然后单击左侧的Install进行安装就可以了。安装成功后,IntelliJIDEAUltimate将会提示你进行重启。重启之后,验证是否......