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

目录

 一.作业内容

二.关键要点理解

2.1接口

2.2委托

三.回归本题:代码实现

3.1定义接口

3.2定义类

3.2.1定义武汉工厂

3.2.2定义南京工厂

3.2.3定义长沙工厂

3.3定义委托

3.4Main函数的调用

3.4.1创建工厂实例

3.4.2创建生产委托

3.4.3通过委托进行生产

3.5完整代码展示

四.运行结果

五.总结


 一.作业内容

       使用 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();

整体概述:

  • 创建一个接口IProductionFactory使其包含生产鸭脖的方法DuckNeckProduction和生产鸭翅的方法DuckWingProduction;
  • 创建三个类,分别代表武汉工厂WuhanFactory、南京工厂NanjingFactory和长沙工厂ChangshaFactory,并使这三个类可以调用接口IProductionFactory;
  • 定义委托ProductionDelegate,用于生成不同的生产委托;创建不同的工厂实例,并生成不同的生产委托进行生产。

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();
        }
    }
}

四.运行结果

结果显示:武汉工厂既可以生产鸭脖,又可以生产鸭翅;南京工厂只可以生产鸭翅;长沙工厂只可以生产鸭脖。实现了作业的基本要求。

五.总结

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

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

  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值