• 工厂模式


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

    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;  
            }  
      
        }

     

  • 相关阅读:
    循环链表结构
    复杂的权衡之时间、空间和单链表结构
    单链表操作之删除
    单链表操作之插入
    单链表操作之替换
    单链表操作之搜索
    文件系统的原理
    类加载的三种方式比较
    shell中awk printf的用法
    推荐网站
  • 原文地址:https://www.cnblogs.com/shanoon/p/5468793.html
Copyright © 2020-2023  润新知