一、题目与代码实现
实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。具体要求如下:
- 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
- 定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
- 使用委托 ProductionDelegate 定义生产委托。
- 在 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();
}
这段就是标准的接口定义。
2.定义契约
IProductionFactory 接口定义了两个方法:ProduceDuckNeck 和 ProduceDuckWing。任何实 现 IProductionFactory 的类,都必须提供这两个方法的具体实现。
3.接口实现
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,将 对使用接口IProductionFactory的WuhanFactory类的实例对象t1中的函数ProduceDuckNeck连接起来,将方法与委托关联起来,然后再直接调pw1。
四、运行结果
五、总结
在这个案例中,我们通过c#设计了一套系统来实现对周黑鸭工厂产品生产的统一管理,其中涉及到定义接口、实现具体工厂类、使用委托以及各方法的协同工作。通过这种方式,系统的各个部分既保持了足够的灵活性和扩展性,又能够在统一的框架下高效协作,达成我们想要实现的目标。