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

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

       简单工厂模式,在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();
// 飞机运行

 

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

可见简单工厂能返回具有同样方法的类的实例,他们可能是不同的派生子类的实例,可能是实际上毫无关系仅仅是共享了相同的接口的类(此处并没有针对共享相同接口的情况举例)。不管是哪一种形式。这些类实例中的方法必须是相同的,并且能够交替使用。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值