您的位置:首页 > 编程语言 > C#

温习C#设计模式之(一) 简单工厂模式

2007-04-20 13:27 232 查看
设计模式对于很多做程序的同仁来说,是很熟悉了。即使没有详细地去研究,也会常常耳闻目染。 我也有同样的感受。一直以来大多是有意或无意使用着、遵循着某些设置模式。但是迄今为止还没有来得及坐下来好好的研究、学习。今后的一段日子里,我将重新来学习一遍设计模式,以补自己的不足。我也将会把学习研究的过程以笔记的形式留于博客,一方面方便以后查询温故 ,另一方面可以帮助像我这样还没有深入学习过设计模式的同仁、朋友、网友一点点启发。(至于过往的设计模式高人,让您见笑了,有什么不对地方还望高人不吝尊开金口赐教一翻)

简单工厂模式,在OO程序设计中经常会在不知不觉中应用到一种模式就是简单工厂模式(Simple Factory Pattern)。根据提供给它的数据,返回几个可能类中的一个类的实例。这便是简单工厂模式从OO思想上的基本概念。继续前面概念的说明:通常情况下,它返回的实例的类都有一个共同的父类和共同的方法,但各自方法执行的任务不同,而且根据不同的数据进行了优化。简单工厂模式不属于23个GoF模式。

接下来从代码的角度出发利用实例来说明简单工厂设计模式。代码为C#语言(在后续笔记中如没有特别指定语言默认都为C#)。在例子中用到了Factory类。假设现在有一交通工具基类Vehicle,它有一运行动作Run的抽象方法,然后有两子类Car和Plane继承于交通工具类,子类各自实现了自己的运行方法Run。


//交通工具基类


public class Vehicle




...{


public abstract void Run();


}


//汽车类


public class Car:Vehicle




...{


public void Run()




...{


//实现Car的运行代码


}




}


//飞机类


public class Plane:Vehicle




...{


public void Run()




...{


//实现Plane的运行代码


}




}


//工厂类


public class Factory




...{


public Vehicel GetVehicle(string VehicelName)




...{


switch(VehicelName)




...{


case "Car":


return new Car();


break;


case "Plane":


return new Plane();


break;


}


}


}

使用基类Vehicle(交通工具类)变量接收子类汽车或飞机类的实例。然后运行Run,实现了统一的调用方式。无论子类是什么总可以用转化为基类的实例。其实这个特性是OO思想三大特性之一的多态性的体现。


Factory factory = new Factory();


Vehicle vCar = factory .GetVehicle("Car");


vCar .Run();//汽车运行


Vehicle vPlane = factory .GetVehicle("Plane");


vPlane .Run();//飞机运行





下面是简单工厂模式类图:



可见简单工厂能返回具有同样方法的类的实例,他们可能是不同的派生子类的实例,可能是实际上毫无关系仅仅是共享了相同的接口的类(此处并没有针对共享相同接口的情况举例)。不管是哪一种形式。这些类实例中的方法必须是相同的,并且能够交替使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐