C#抽象工厂模式的几种实现方法及比较

C#抽象工厂模式的几种实现方法及比较,第1张

C#抽象工厂模式的几种实现方法及比较,第2张

使用设计模式可以使我们的代码更加灵活,更易于扩展和维护。各种面向对象的编程语言提供了基本相同的机制:如类、继承、派生、多态等等。但是它有自己的特点,C#中的反射机制是一个非常重要的工具,用好了可以在实践中发挥很大的作用。

让我们看一个例子:

我的一些程序需要一系列的对象,比如苹果,橘子…要利用它们,我们得根据用户的要求在程序中生成,然后逐个调用new运算符,这样客户端程序就需要知道相应类的信息,生成的代码显然不够灵活。能不能不使用具体的类,只在代码中说明我们需要什么,然后就能得到我们想要的对象?

哦,我们都看设计模式。听着,很多人在那里宣扬他们有多伟大。让我们看看如何使用它们来解决问题。目标明确,就看哪家能满足我们的要求了。我看过GoF所有的设计模式,但也看过一部分,那就看看我们能不能“聚一聚”。j:嗯,我们的程序考虑的是如何创建对象,创建方式要符合要求。那么我们来浏览一下每个模式的“意图”部分。呵呵,第一个好像中彩票了。让我们来看看抽象工厂。“提供一个接口来创建一系列相关或相互依赖的对象,而不指定它们的具体类”,至少“不指定它们的具体类”符合我们的要求。看看它的结构:

我们的问题似乎没那么复杂。只有橘子、苹果等。(应该是产品)。很明显是一类的,都是水果。我们只需要一个生产水果的工厂,左边的继承层次不需要。只有一个方法可以检验它是否有效。先不要管它正统不正统,就事论事j。

下面的东西显然是我们所需要的:

公共接口IFruit
{
}

public class Orange:IFruit
{
public Orange()
{
Console。WriteLine("一个橘子到手了!");
}
}

public class Apple:IFruit
{
public Apple()
{
Console。WriteLine("一个苹果到手了!");
}
}

我们的水果工厂应该是什么样的?在上面的结构图中,它给出了CreateProductA。嗯,我会做Orange,还有一个CreateProductB。我不能做橙色吗??

public类fruit factory
{
public Orange make Orange()
{
return new Orange();
}
public Apple make Apple()
{
return new Apple();
}
}

这个工厂怎么用?让我们编写以下代码:

字符串FruitName = Console。ReadLine();
if ruit my ruit = null;
fruit factory myfruit factory = new fruit factory();

switch(fruit name)
{
case " Orange ":
my fruit = my fruit factory。make orange();
break;
case " Apple ":
my fruit = MyFruitFactory。make apple();
break;
默认:
break;
}

运行,然后在控制台输入你想要的,呵呵,成功了。沉浸在快乐中,你会忘乎所以。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C#抽象工厂模式的几种实现方法及比较

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情