工厂模式三部曲之一_简单工厂模式

      这段时间想要好好了解下工厂模式,从而在园中看了很多博友的关于工厂模式的博客, 受益匪浅......同时也感谢各位博友对知识的无私的分享....知识在于积累,但个人觉得积累知识的最好方式是当自己学懂了某个知识点之后,进行一番总结,将学到的东西再慢慢的推理一遍,再细细的消化一遍,进而转变为自己的东西.......

简单工厂模式

简单工厂模式又叫做静态工厂模式,顾名思义,它就是用来实例化目标类的静态类即客户端不需要负责“创建”对象的职责,只要通过这个静态类来创建出对应的类的实例返回给客户端,客户端只需要负责“消费”就可以了。。。

【解决问题】:如何去实例化一个合适的对象

【核心思想】:有一个专门的类类负责创建实例的过程 并返回给实例的对象

【角      色】

工厂类角色:担任这个角色的简单工厂模式的核心,工厂类在客户端的直接调用下 创建产品对象并返回该对象。

抽象产品角色:担任这个角色的类是工厂类所创建的对象的父类,或者他们有共同的接口。 

具体产品角色:工厂类所创建的任何对象都是这个角色的实例 

 

下面介绍一个例子来进行讲解

首先了解下现实场景:一个人总有很多件不同类型的衣服来适应不同的场合,怎么样用程序来实现呢??

对该场景进行分析:

工厂类:根据场合,获得相应衣服--- CreateCloth()方法
抽象产品:衣服具有一些共同的特征,或者定义公共方法或者属性,放在此类中---- -abstract:GetCloth()抽象方法
具体产品:衣服 继承与接口或者抽象 同时具有自身的特点

 

接下来贴上代码:

抽象产品类:定义了一个公共的方法GetCloth(),用来获取对应的衣服

1   // 抽象产品:获取衣服
2       public  abstract  class Cloth
3     {
4         public  abstract  void GetCloth();
5     }

 

具体产品类:定义了三种具体的产品:商务装、休闲装、运动装,都继承于抽象产品类,重写了抽象产品类中的抽象方法

 1     // 具体产品1:商务装
 2       class 商务装 : Cloth
 3     {
 4          public  override  void GetCloth()
 5         {
 6             Console.WriteLine( " 商务装...... ");
 7         }
 8     }
 9 
10      // 具体产品2:运动装
11       class 运动装 : Cloth
12     {
13          public  override  void GetCloth()
14         {
15             Console.WriteLine( " 运动装..... ");
16         }
17     }
18 
19      // 具体产品3:休闲装
20       class 休闲装 : Cloth
21     {
22          public  override  void GetCloth()
23         {
24             Console.WriteLine( " 休闲装....... ");
25         }
26     }

 

 工厂类():根据客户端传入的参数来实例化对应类的对象 并返回该对象给客户端(这里的参数为服装类型拼音的小写首字母),定义了一个CreateCloth()方法----当然,这里的类型必须是已知的,也可以将类型放置于配置文件中来进行扩展,,便于类型的添加和修改........

 1       // 工厂类:根据客户端条件 创建并返回对象
 2       public  class ClothFactory
 3     { 
 4         
 5         public  static Cloth CreateCloth( string clothtype)
 6        {
 7            Cloth cloth =  null;
 8              switch(clothtype)
 9             {
10                  case  " sw ":
11                     cloth =  new 商务装();
12                      break;
13                  case  " yd ":
14                     cloth =  new 运动装();
15                      break;
16                  case  " xx ":
17                     cloth =  new 休闲装();
18                      break;
19                  default:
20                     cloth =  null;
21                      break;
22             }
23              return cloth;
24        }

 

客户端:调用工厂类的静态方法,传入合适的参数获取对应对象

 1          // 客户端
 2           static  void Main( string[] args)
 3         {
 4              // 要求商务装
 5              Cloth cloth = ClothFactory.CreateCloth( " sw ");
 6             cloth.GetCloth();
 7 
 8              // 要求运动装
 9              Cloth clothsport = ClothFactory.CreateCloth( " yd ");
10             clothsport.GetCloth();
11 
12             Console.ReadKey();
13         }

 

 

总结优缺点:

优点:用户在使用时是根据工厂类去创建所需的对象实例,而无需了解是如何创建和组织这种细节问题,有利于软件体系结构的优化

缺点:1.创建和不同实例对象的操作都在一个类中完成,即不符合单一职责的原则

        2.当需要添加或者删除某个功能是会比较麻烦,需要修改工厂类,违背了开放-封闭的原则(对修改封闭,对扩展开放)

        3.工厂类中的方法为static静态方法(静态工厂方法),不能通过继承来改变创建行为

 

        嘿嘿,既然是工厂模式三部曲...当然还有后续的工厂模式和抽象工厂模式了..........敬请关注.............


 

 

 

 

转载于:https://www.cnblogs.com/holyknight-zld/archive/2012/08/06/samplefactory.html

你可能感兴趣的:(工厂模式三部曲之一_简单工厂模式)