对周黑鸭工厂的产品生产进行管理

本文介绍了如何使用C#设计一个系统来统一管理周黑鸭工厂的产品生产,涉及接口的定义、工厂类的实现、委托的使用,展示了如何通过接口和委托实现多态性和代码的扩展性。
摘要由CSDN通过智能技术生成

 一、题目与代码实现

实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。具体要求如下:

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

namespace zuoye1
{
    interface IProductionFactory
    {
        // 生产鸭脖的方法
        void ProduceDuckNeck();
        // 生产鸭翅的方法
        void ProduceDuckWing();

    }
    class WuhanFactory : IProductionFactory
    {
        public void ProduceDuckNeck() { Console.WriteLine("武汉工厂生产鸭脖"); }
        public void ProduceDuckWing() { Console.WriteLine("武汉工厂生产鸭翅"); }
    }
    class NanjingFactory : IProductionFactory
    {
        public void ProduceDuckNeck() { Console.WriteLine("南京工厂不生产鸭脖"); }
        public void ProduceDuckWing() { Console.WriteLine("南京工厂生产鸭翅"); }
    }
    class ChangshaFactory : IProductionFactory
    {
        public void ProduceDuckNeck() { Console.WriteLine("长沙工厂生产鸭脖"); }
        public void ProduceDuckWing() { Console.WriteLine("长沙工厂不生产鸭翅"); }
    }
    internal class Program
    {
        public delegate void ProductionDelegate();
        static void Main(string[] args)
        {
            IProductionFactory t1 = new WuhanFactory();
            IProductionFactory t2 = new NanjingFactory();
            IProductionFactory t3 = new ChangshaFactory();
            ProductionDelegate pw1 = t1.ProduceDuckNeck;
            ProductionDelegate pn1 = t2.ProduceDuckNeck;
            ProductionDelegate pc1 = t3.ProduceDuckNeck;
            ProductionDelegate pw2 = t1.ProduceDuckWing;
            ProductionDelegate pn2 = t2.ProduceDuckWing;
            ProductionDelegate pc2 = t3.ProduceDuckWing;
            pw1();
            pw2();
            pn1();
            pn2();
            pc1();
            pc2();
        }   
    }
}

二、 接口

1.接口的语法结构:

[访问修饰符] interface 接口标识符 [:基接口列表]

{

    接口体;

}

 interface IProductionFactory
 {
     // 生产鸭脖的方法
     void ProduceDuckNeck();
     // 生产鸭翅的方法
     void ProduceDuckWing();
 }

 这段就是标准的接口定义

接口成员访问权限为 public ,但 不能加访问修饰符
接口成员函数不能有定义;
接口的成员必须是 方法,属性,事件或索引器, 不能包含常数、字段、运算符、实例构造函数、析构函数或类型。
2.定义契约

  IProductionFactory 接口定义了两个方法ProduceDuckNeck 和 ProduceDuckWing。任何实    现 IProductionFactory 的类,都必须提供这两个方法的具体实现。 

3.接口实现 
实现:类要继承某个接口用 : ,在类的定义中给出接口中所定义方法的实际实现。
除显示实现接口外,类中接口实现必须显示声明为 public
class WuhanFactory : IProductionFactory
{
    public void ProduceDuckNeck() { Console.WriteLine("武汉工厂生产鸭脖"); }
    public void ProduceDuckWing() { Console.WriteLine("武汉工厂生产鸭翅"); }
}

  在WuhanFactory中,具体写出了IProductionFactory中定义的函数ProduceDuckNeck和函数ProduceDuckWing的函数体,输出了武汉工厂的生产产品。

4.接口实例对象的调用
IProductionFactory t1 = new WuhanFactory();

   接口创建了WuhanFactory类的实例对象t1,如果不用委托,则可以直接调用函数ProduceDuckNeck和函数ProduceDuckWing,就输出结果

t1.ProduceDuckNeck();
t1.ProduceDuckWing();
5、提高代码的可拓展性和可维护性

      当我们想要添加新的工厂类或者改变生产方式时,只用确保新的类实现了 IProductionFactory 接口。而主程序仍然可以使用同样的方式来调用新工厂的方法,有助于代码的可扩展性可维护

6.意义

    通过接口IProductionFactory,我们可以用同一接口引用来指向不同的实现类的实例new WuhanFactory()new NanjingFactory()new ChangshaFactory(),在下文中会提到),而调用ProduceDuckNeck()ProduceDuckWing()方法时,执行的却是各自类的具体实现,充分体现了多态性。

三、委托 

1.委托的含义

        委托是一种可以指向方法的引用,可以理解为一种函数指针,是类型安全的。它类似于C++中的函数指针,通过对于方法特征和返回值类型的声明,封装了具有相同特征和返回类型的方法。 

使用委托需要三个步骤:声明委托类型;创建委托实例;向委托实例注册方法

 2.委托的定义

         [访问修饰符] delegate [委托类型] 委托名(参数)

public delegate void ProductionDelegate();
3.委托调实例对象的调用
ProductionDelegate pw1 = t1.ProduceDuckNeck;
ProductionDelegate pw2 = t1.ProduceDuckWing;
pw1();
pw2();

委托ProductionDelegate创建一对象pw1,将 对使用接口IProductionFactoryWuhanFactory类的实例对象t1中的函数ProduceDuckNeck连接起来,将方法与委托关联起来,然后再直接pw1。

四、运行结果 

五、总结

  在这个案例中,我们通过c#设计了一套系统来实现对周黑鸭工厂产品生产的统一管理,其中涉及到定义接口、实现具体工厂类、使用委托以及各方法的协同工作。通过这种方式,系统的各个部分既保持了足够的灵活性和扩展性,又能够在统一的框架下高效协作,达成我们想要实现的目标。

六、仓库 

windows zuoye1 · 马彤彤/一只彤 - Gitee.com

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值