zoukankan      html  css  js  c++  java
  • 工厂模式

    一、简单工厂与工厂模式的区别 

    1.1 简单工厂模式

         专门定义一个工厂类负责创建其他类的实例,最大的优点在于工厂类中包含了必要的逻辑,根据客户需要的条件动态实例化相关的类

    1.2 工厂方法模式

         创建对象的接口,让子类去决定具体实例化的对象,把简单的内部逻辑判断移到了客户端代码。工厂方法克服了简单工厂违背开放-封闭原则的缺点,又保持了封装对象创建过程的优点

    二、简单工厂UML图

     

    三、代码实现

      3.1 工厂模式

    class Program  
        {  
            static void Main(string[] args)  
            {  
                IFactory factory = new UndergraduateFactory();   //由接口创建新的学雷锋大学生  
                LeiFeng student = factory.CreateLeifeng();   //实例化  
      
                student.BuyRice();  
                student.Sweep();  
                student.Wash();  
            }  
        }  
        //雷锋类,定义了一些功能  
        class LeiFeng    
        {  
            public void Sweep(){ } //擦桌子  
            public void Wash(){ }  //洗衣服  
            public void BuyRice(){ }  //买米  
        }  
      
      
        //学雷锋的大学生  
        class UnderGraduate : LeiFeng{ }  
        //社区志愿者  
        class Volunteer : LeiFeng{ }  
      
        //雷锋工厂  
        interface IFactory //定义一个接口,实现创建雷锋类的功能  
        {  
            LeiFeng CreateLeifeng();  
        }  
          
        class UndergraduateFactory : IFactory//学雷锋大学生工厂  
        {  
            public LeiFeng CreateLeiFeng()  
            {  
                return new UnderGraduate();  
            }  
        }  
        class VolunteerFactory : IFactory//社区志愿者工厂  
        {  
            public LeiFeng CreateLeiFeng()  
            {  
                return new Volunteer();  
            }  
        }

      3.2 简单工厂实现

    class Program  
        {  
            static void Main(string[] args)  
            {  
                LeiFeng studentA = SimpleFactory.CreateLeiFeng("学雷锋的大学生");//用简单工厂创建并实例化学雷锋的大学生  
                studentA.BuyRice();  
                LeiFeng studentB = SimpleFactory.CreateLeiFeng("社区志愿者");//用简单工厂创建实例化社区志愿者  
                studentB.BuyRice();  
            }  
        }  
        //雷锋类,定义了一些功能  
        class LeiFeng    
        {  
            public void Sweep(){ } //擦桌子  
            public void Wash(){ }  //洗衣服  
            public void BuyRice(){ }  //买米  
        }  
      
      
        //简单工厂类  
        class SimpleFactory  
        {  
           public static LeiFeng CreateLeiFeng(string type)  
           {  
                LeiFeng result = null;  
                switch (type) //判断选择要创建对象的类型  
                {   
                    case "学雷锋的大学生":  
                        result = new UnderGraduate();  
                        break;  
                    case "社区志愿者":  
                       result = new UnderGraduate();  
                       break;  
                }  
                return result;  
            }  
      
        }

     

  • 相关阅读:
    16平衡树
    15二叉检索树
    11用户权限
    10触发器
    8函数
    8存储过程
    linux下如何进入单用户模式
    RHEL6.4 字符模式下安装图形界面图文教程
    杂记
    Java内存管理(一):深入Java内存区域
  • 原文地址:https://www.cnblogs.com/shanoon/p/5468793.html
Copyright © 2011-2022 走看看