码迷,mamicode.com
首页 > 其他好文 > 详细

简单工厂模式

时间:2014-05-14 23:04:36      阅读:411      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   c   tar   

简单工厂模式

概念

从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

实现方式(附图)

 

简单工厂模式的UML类图
简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
该模式中包含的角色及其职责
工厂(Creator)角色
简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
抽象产品(Product)角色
简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
具体产品(Concrete Product)角色
是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
(以上内容感谢度娘~)
 
 

简单工厂示例

UML图

 

 bubuko.com,布布扣
 
 
bubuko.com,布布扣
   class Program
    {
        static void Main(string[] args)
        {
            Operation oper;
            oper = OperationFactory.CreateOperation("4");
            if(oper!=null)
            {
                oper.NumberA = 1;
                oper.NumberB = 2;

                Console.WriteLine(oper.GetResult());
            }
            Console.ReadLine();
        }
    }

    #region //简单工厂类
    public class OperationFactory
    {
        public static Operation CreateOperation(string operation)
        {
            Operation oper = null;
            switch (operation)
            {
                case "+":
                    oper = new OperationAdd();
                    break;
                case "-":
                    oper = new OperationSub();
                    break;
                case "*":
                    oper = new OperationMul();
                    break;
                case "/":
                    oper = new OperationDiv();
                    break;
            }

            return oper;


        }
    }
    #endregion

    #region//运算类Operation
    public class Operation
    {
        private double _numberA = 0;
        private double _numberB = 0;

        public double NumberA
        {
            get 
            {
                return _numberA;
            }
            set
            {
                _numberA = value;
            }
        }


        public double NumberB
        {
            get
            {
                return _numberB;
            }
            set
            {
                _numberB = value;
            }
        }


        public virtual double GetResult()
        {
            double result = 0;
            return result;
        }
    }
    #endregion

    #region//继承运算类
    public class OperationAdd : Operation
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA + NumberB;
            return result;
        }
    }

    public class OperationSub : Operation
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA - NumberB;
            return result;
        }
    }

    public class OperationMul : Operation
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA * NumberB;
            return result;
        }
    }

    public class OperationDiv : Operation
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA / NumberB;
            return result;
        }
    }
    #endregion
View Code

 

简单工厂就是把new脱离出来,延迟到子类里做处理。然后通过工厂类做判断哪种情况对应哪个子类。

适当的时候,Factory可以做成配置文件进行处理。

 

简单工厂模式,布布扣,bubuko.com

简单工厂模式

标签:style   blog   class   code   c   tar   

原文地址:http://www.cnblogs.com/xkdsz/p/3715038.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!