技术开发 频道

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

【IT168技术文档】

  利用设计模式可以使我们的代码更灵活,更容易扩展,更容易维护。各种面向对象的程序设计语言都提供了基本相同的机制:比如类、继承、派生、多态等等。但是又有各自的特色,C# 中的反射机制便是一个很重要的工具,好好地利用就可以在实际中发挥很大的作用。
 
  我们来看一个例子:
 
  我的程序中有需要一系列的对象,比如apple,orange…, 要想利用他们,我们就必须在程序中根据用户要求,然后一个个调用 new 操作符来生成他们,这样客户程序就要知道相应的类的信息,生成的代码显然不够灵活。我们可以在代码中不利用具体的类,而只是说明我们需要什么,然后就能够得到我们想要的对象吗?
 
  哦,我们都看设计模式,听吧,很多人都在那里鼓吹他们是如何如何的棒,我们看看怎么样利用他们来解决问题。目标明确了,那我们看看哪个能够符合我们的要求。GoF的《设计模式》都看过吧,似懂非懂的看了一些,那我们看看能够不能够上去呢?J 嗯,我们的程序考虑的是对象怎么创建的,创建型模式应该符合要求吧。然后我们浏览一下各模式的意图部分。呵呵,第一个好像就撞到彩了,抽象工厂,我们看看吧,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类,至少无需指定它们具体的类符合我们的要求。
 
  我们的问题好像用不到这么复杂,只有orange,apple等等(应该就是product了),他们显然是一类的,都是fruit,我们只要一个生产水果的工厂就可以,左边的继承层次不要,只有一个FruitFactroy看看行不,先别管它正统不正统,实用就行。

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

Public interface IFruit { } public class Orange:IFruit {  public Orange()  {   Console.WriteLine("An orange is got!");  } } public class Apple:IFruit {  public Apple()  {   Console.WriteLine("An apple is got!");  } }
  我们的FruitFactory应该是怎么样呢?
public class FruitFactory {  public Orange MakeOrange()  {   return new Orange();  }  public Apple MakeApple()  {   return new Apple();  } }
  怎么使用这个工厂呢?我们来写下面的代码:
string FruitName = Console.ReadLine(); IFruit MyFruit = null; FruitFactory MyFruitFactory = new FruitFactory(); switch (FruitName) {  case "Orange":   MyFruit = MyFruitFactory.MakeOrange();   break;  case "Apple":   MyFruit = MyFruitFactory.MakeApple();   break;  default:   break; }
  编译运行,然后在控制台输入想要的东西,呵呵,成功了。沉浸在幸福中的你得意忘形了吧。

0
相关文章