C#抽象工厂模式的几种实现方法及比较
2009-10-15 17:37
525 查看
利用设计模式可以使我们的代码更灵活,更容易扩展,更容易维护。各种面向对象的程序设计语言都提供了基本相同的机制:比如类、继承、派生、多态等等。但是又有各自的特色,C# 中的反射机制便是一个很重要的工具,好好地利用就可以在实际中发挥很大的作用
我们来看一个例子:
我的程序中有需要一系列的对象,比如apple,orange…, 要想利用他们,我们就必须在程序中根据用户要求,然后一个个调用 new 操作符来生成他们,这样客户程序就要知道相应的类的信息,生成的代码显然不够灵活。我们可以在代码中不利用具体的类,而只是说明我们需要什么,然后就能够得到我们想要的对象吗?
哦,我们都看设计模式,听吧,很多人都在那里鼓吹他们是如何如何的棒,我们看看怎么样利用他们来解决问题。目标明确了,那我们看看哪个能够符合我们的要求。GoF的《设计模式》都看过吧,似懂非懂的看了一些,那我们看看能够不能够“凑”上去呢?J 嗯,我们的程序考虑的是对象怎么创建的,创建型模式应该符合要求吧。然后我们浏览一下各模式的“意图”部分。呵呵,第一个好像就撞到彩了,抽象工厂,我们看看吧,“提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类”,至少“无需指定它们具体的类”符合我们的要求。来看看它的结构吧:
Public interface IFruit
public class Orange:IFruit
public class Apple:IFruit
public class FruitFactory
string FruitName = Console.ReadLine();
IFruit MyFruit = null;
FruitFactory MyFruitFactory = new FruitFactory();
switch (FruitName)
FruitFactory:
public class FruitFactory
public class FruitFactory
{
{
{
Type type = Type.GetType(Name,true);
MyFruit = (IFruit)Activator.CreateInstance(type);
}
catch (TypeLoadException e)
Console.WriteLine("I dont know this kind of fruit,exception caught - {0}" ,e.Message);
return MyFruit;
}
}
经过这样的处理以后,增加新的水果的时候,我们不需要修改客户代码了,同时工厂的代码也不需要修改了,怎么样,爽吧!
我们来看一个例子:
我的程序中有需要一系列的对象,比如apple,orange…, 要想利用他们,我们就必须在程序中根据用户要求,然后一个个调用 new 操作符来生成他们,这样客户程序就要知道相应的类的信息,生成的代码显然不够灵活。我们可以在代码中不利用具体的类,而只是说明我们需要什么,然后就能够得到我们想要的对象吗?
哦,我们都看设计模式,听吧,很多人都在那里鼓吹他们是如何如何的棒,我们看看怎么样利用他们来解决问题。目标明确了,那我们看看哪个能够符合我们的要求。GoF的《设计模式》都看过吧,似懂非懂的看了一些,那我们看看能够不能够“凑”上去呢?J 嗯,我们的程序考虑的是对象怎么创建的,创建型模式应该符合要求吧。然后我们浏览一下各模式的“意图”部分。呵呵,第一个好像就撞到彩了,抽象工厂,我们看看吧,“提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类”,至少“无需指定它们具体的类”符合我们的要求。来看看它的结构吧:
Public interface IFruit
public class Orange:IFruit
public class Apple:IFruit
public class FruitFactory
string FruitName = Console.ReadLine();
IFruit MyFruit = null;
FruitFactory MyFruitFactory = new FruitFactory();
switch (FruitName)
FruitFactory:
public class FruitFactory
public class FruitFactory
{
{
{
Type type = Type.GetType(Name,true);
MyFruit = (IFruit)Activator.CreateInstance(type);
}
catch (TypeLoadException e)
Console.WriteLine("I dont know this kind of fruit,exception caught - {0}" ,e.Message);
return MyFruit;
}
}
经过这样的处理以后,增加新的水果的时候,我们不需要修改客户代码了,同时工厂的代码也不需要修改了,怎么样,爽吧!
相关文章推荐
- C#抽象工厂模式的几种实现方法及比较(转)
- C#抽象工厂模式的几种实现方法及比较
- 【转】C#抽象工厂模式的几种实现方法及比较
- C#抽象工厂模式的几种实现方法及比较
- C#抽象工厂模式的几种实现方法及比较
- C#抽象工厂模式的几种实现方法及比较(转载)
- [C#]抽象工厂模式的几种实现方法及比较
- C#抽象工厂模式的几种实现方法及比较
- C#抽象工厂模式的几种实现方法及比较
- C#抽象工厂模式的几种实现方法及比较 【转】
- C#抽象工厂模式的几种实现方法及比较
- C#抽象工厂模式的几种实现方法及比较(外摘)
- C#抽象工厂模式的几种实现方法及比较
- C#抽象工厂模式的几种实现方法及比较开发者在线 Builder.com.cn 更新时间:2008-07-19作者: 来源:
- C#抽象工厂模式的几种实现方法及比较
- C#抽象工厂模式的几种实现方法及比较
- C#抽象工厂模式的几种实现方法及比较
- C#抽象工厂模式的几种实现方法及比较
- C#抽象工厂模式的几种实现方法及比较
- C#抽象工厂模式的几种实现方法及比较