zoukankan      html  css  js  c++  java
  • 设计模式のFactoryPattern(工厂模式)----创建模式

    一、产生背景

      设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",可以把这三个作为产品类,共同实现一个接口。

    二、通常的做法

           1、定义一个接口(或抽象方法)

      2、我们为这个接口提供多种实现

      3、选择哪种实现的权利剥离客户端

    三、具体实例

    下面是一个加减乘除四则运算的例子。

     public class Operation
        {
            private double _leftOP = 0;
            private double _rightOP = 0;
    
            public double LeftOP
            {
                get { return _leftOP; }
                set { _leftOP = value; }
            }
    
            public double RightOP
            {
                get { return _rightOP; }
                set { _rightOP = value; }
            }
    
            public virtual double GetResult()
            {
                double result=0;
                return result;
            }
        }
    
        public class OperationAdd : Operation   //加法计算  
        {
            public override double GetResult()
            {
    
                double result = 0;
                result = LeftOP + RightOP;
                return result;
            }
        }
        public class OperationSub : Operation    //减法计算  
        {
            public override double GetResult()
            {
                double result = 0;
                result = LeftOP - RightOP;
                return result;
            }
        }
        public class OperationMul : Operation     //乘法计算  
        {
            public override double GetResult()
            {
                double result = 0;
                result = LeftOP * RightOP;
                return result;
            }
        }
        public class OperationDiv : Operation    //除法计算  
        {
            public override double GetResult()
            {
                double result = 0;
                if (RightOP == 0)               //考虑除法的除数为0时没有意义  
                    throw new Exception("除法不能为0");
                result = LeftOP / RightOP;
                return result;
            }
        }
    
        public class OperationFactory            //定义OperationFactory(运算符工厂)  
        {
            public static Operation createOperate(string operate)
            {
                Operation oper = null;
                switch (operate)
                {
                    case "+":
                        oper = new OperationAdd();
                        break;
                    case "-":
                        oper = new OperationSub();
                        break;
                    case "*":
                        oper = new OperationMul();
                        break;
                    case "/":
                        oper = new OperationDiv();
                        break;
                }
                return oper;
            }
        }

    四、设计模式分析

      优点: 

        1、一个调用者想创建一个对象,只要知道其名称就可以了。

        2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。

        3、屏蔽产品的具体实现,调用者只关心产品的接口。

      缺点:

        每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

    点击下载源码

  • 相关阅读:
    如何将List<T>转换相应的Html(xsl动态转换)(一)
    如何将List<T>转换相应的Html(xsl动态转换)(二)
    JavaScript设计模式之一Interface接口
    架构设计资源
    将ASP.NET MVC 2.0 部署在IIS6和IIS7上的教程
    如何将List<T>转换相应的Html(xsl动态转换)(一)
    步步为营 .NET 代码重构学习笔记 六
    如何将List<T>转换相应的Html(xsl动态转换)(二)
    模式资源
    Entity Framework Code First
  • 原文地址:https://www.cnblogs.com/xietianjiao/p/8117991.html
Copyright © 2011-2022 走看看