温习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();//飞机运行
下面是简单工厂模式类图:
可见简单工厂能返回具有同样方法的类的实例,他们可能是不同的派生子类的实例,可能是实际上毫无关系仅仅是共享了相同的接口的类(此处并没有针对共享相同接口的情况举例)。不管是哪一种形式。这些类实例中的方法必须是相同的,并且能够交替使用。
简单工厂模式,在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();//飞机运行
下面是简单工厂模式类图:
可见简单工厂能返回具有同样方法的类的实例,他们可能是不同的派生子类的实例,可能是实际上毫无关系仅仅是共享了相同的接口的类(此处并没有针对共享相同接口的情况举例)。不管是哪一种形式。这些类实例中的方法必须是相同的,并且能够交替使用。
相关文章推荐
- C#设计模式之简单工厂模式(Simple Factory Pattern)
- (原创)重学设计模式,总结C#细节 一 简单工厂模式
- C#设计模式之简单工厂模式(过渡模式)
- C#设计模式(2)——简单工厂模式
- 《C# 设计模式》笔记: 第8章 简单工厂模式
- 【JS设计模式】温习简单工厂模式、工厂方法模式、抽象工厂模式概念
- C#设计模式之简单工厂模式(Simple Factory)
- Head First 设计模式 读书摘记(五) 简单工厂模式 C#代码
- 【JS设计模式】温习简单工厂模式、工厂方法模式、抽象工厂模式概念
- C#设计模式之1——简单工厂模式
- C#设计模式学习笔记(一) 之 简单工厂模式
- C#设计模式之简单工厂模式
- 设计模式之简单工厂模式(C#语言描述)
- 设计模式-简单工厂模式(SimpleFactory-C#)
- 设计模式C#描述之——简单工厂模式
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
- C#设计模式——简单说(简单工厂模式)
- 设计模式C#描述之——简单工厂模式、抽象工厂模式、单例与多例模式
- C#设计模式(2)——简单工厂模式(Factory )
- 【C# 设计模式-简单工厂模式 】