简单工厂模式和工厂方法模式

一:简单工厂模式

 

1,概念

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

2,uml图

 

3,代码示例

    class Program
    {
        static void Main(string[] args)
        {
            Operate oper;  //创建Operate类的oper类
            oper = OperationFactoty.createOperate("+"); //运用简单工厂判断实力化的对象
            oper.NumberA = 1;  //赋值
            oper.NumberB = 2;
            double result = oper.GetResult();
            Console.WriteLine(result);  //显示运算结果
        }
    }
    
    //简单工厂,通过判断参数,实例化相应的对象
    public class OperationFactoty  
    {
        public static Operate createOperate(string operate)
        {
            Operate oper = null;
            switch (operate){  }
            return oper;
        }
    }

    //定义一个运算基类,包含GetResult虚方法
    public class Operate //定义一个运算类
    {
        private double numberA=0;    //运算前的数
        private double numberB=0;    //运算后的数
        public double NumberA{  }
        public double NumberB{  }
      
        public virtual double GetResult()//返回运算后结果的方法
        {
            return result;      //返回结果
        }
    }

   // 运算类的四个继承类,分别实现加减乘除四个运算
    public class NumberAdd : Operate    //加运算
    {
        public override double GetResult()//实现基类中的虚方法 
        {
            double result = NumberA + NumberB;
            return result;
        }
    }
    public class NumberSub:Operate    //减运算
    {
        public override double  GetResult(){   }
    }
    public class NumberMul:Operate   //乘运算
    {
        public override double  GetResult(){   }
    }
    public class NumberDiv:Operate    //除运算
    {
        public override double GetResult(){   }
    }

 

4,总结

简单工厂模式,我把它理解为一个模子,根据外界给定的原料,在加上自身封装好的判断,生产出不同类型的相应的产品、对象。

简单工厂模式使用场景:工厂类负责创建的对象比较少;客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;简单工厂很容易违反高内聚低耦合原则,因此一般只在很简单的情况下应用。

 

 

二:工厂方法模式

 

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

 

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

    }


4,总结

 

    工厂方法模型中,“工厂”创建的是还没有分化好的对象,其中没有逻辑判断相比于简单工厂模式,基类工厂去实现接口,子工厂去实现判断并能生产出相应功能的对象。

 

三:简单工厂和工厂方法模式的比较

 

1,简单工厂模式

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

 

2,工厂方法模式

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

 


 


 

 

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值