工厂模式

来源:互联网 发布:雅思听力提高 知乎 编辑:程序博客网 时间:2024/05/10 21:30

工厂模式

何为工厂模式:定义一个用于创建对象的接口,让子类去决定实例化那一个类,FactoryMethod可以使一个类的实例化延迟到其子类。

工厂模式分类

工厂模式按其形态分主要分为三类:简单工厂、工厂模式和抽象工厂模式。

简单工厂模式

简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。顾名思义工厂就是生产东西的,有原料(参数),模子(对象)就能生产出很多个具有相同功能的对象啦。

uml图


代码实现 

[html]view plain copy print?在CODE上查看代码片派生到我的代码片
  1. public class Program    
  2.     {    
  3.         static void Main(string[] args)    
  4.         {    
  5.             LeiFeng studentA = SimpleFactory.CreateLeiFeng("学雷锋的大学生");//用简单工厂创建并实例化学雷锋的大学生    
  6.             studentA.BuyRice();    
  7.             LeiFeng studentB = SimpleFactory.CreateLeiFeng("社区志愿者");//用简单工厂创建实例化社区志愿者    
  8.             studentB.BuyRice();    
  9.         }    
  10.     }    
  11.     //雷锋类,定义了一些功能    
  12.     class LeiFeng      
  13.     {    
  14.         public void Sweep(){ } //擦桌子    
  15.         public void Wash(){ }  //洗衣服    
  16.         public void BuyRice(){ }  //买米    
  17.     }    
  18.     
  19.     
  20.     //简单工厂类    
  21.     class SimpleFactory    
  22.     {    
  23.        public static LeiFeng CreateLeiFeng(string type)    
  24.        {    
  25.             LeiFeng result = null;    
  26.             switch (type) //判断选择要创建对象的类型    
  27.             {     
  28.                 case "学雷锋的大学生":    
  29.                     result = new UnderGraduate();    
  30.                     break;    
  31.                 case "社区志愿者":    
  32.                    result = new UnderGraduate();    
  33.                    break;    
  34.             }    
  35.             return result;    
  36.         }    
  37.     
  38.     }  

工厂模式:创建对象的接口,让子类去决定具体实例化的对象

[html]view plain copy print?在CODE上查看代码片派生到我的代码片
  1. public class Program  {    
  2.         static void Main(String[] args)    
  3.         {    
  4.             IFactory factory = new UndergraduateFactory();   //由接口创建新的学雷锋大学生    
  5.             LeiFeng student = factory.CreateLeifeng();   //实例化    
  6.     
  7.             student.BuyRice();    
  8.             student.Sweep();    
  9.             student.Wash();    
  10.         }    
  11.     }    
  12.     //雷锋类,定义了一些功能    
  13.     class LeiFeng      
  14.     {    
  15.         public void Sweep(){ } //擦桌子    
  16.         public void Wash(){ }  //洗衣服    
  17.         public void BuyRice(){ }  //买米    
  18.     }    
  19.     
  20.     
  21.     //学雷锋的大学生    
  22.     class UnderGraduate : LeiFeng{ }    
  23.     //社区志愿者    
  24.     class Volunteer : LeiFeng{ }    
  25.     
  26.     //雷锋工厂    
  27.     interface IFactory //定义一个接口,实现创建雷锋类的功能    
  28.     {    
  29.         LeiFeng CreateLeifeng();    
  30.     }    
  31.         
  32.     class UndergraduateFactory : IFactory//学雷锋大学生工厂    
  33.     {    
  34.         public LeiFeng CreateLeiFeng()    
  35.         {    
  36.             return new UnderGraduate();    
  37.         }    
  38.     }    
  39.     class VolunteerFactory : IFactory//社区志愿者工厂    
  40.     {    
  41.         public LeiFeng CreateLeiFeng()    
  42.         {    
  43.             return new Volunteer();    
  44.         }    
  45.     }  
注:文中的:表示extends
0 0
原创粉丝点击