注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

长风明志的博客

不要也不能做下一个谁,应该且可以做第一个自己

 
 
 

日志

 
 

设计模式1:简单工厂模式  

2013-09-11 10:24:00|  分类: 设计模式 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
简单工厂模式:使用一个单独的类来实例化对象,以后要增加或修改需要实例化的对象就在这个类中修改或增加。这个类便是我们说的简单工厂。
下面以实现一个”简单计算器“为例:
简单工厂设计模式UML图:
设计模式1:简单工厂模式 - changfengmingzhi - 长风明志的博客
 
1.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;
    }
}

2.加减乘除类:

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

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

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

class OperationDiv:Operation
{
    public override double GetResult()
    {
        double result=0;
        if(NumberB==0)
              throw new Exception("除数不能为0。");
        result=NumberA/NumberB;
        return result;
    }
}


3.简单运算工厂类:

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

可以看到在简单运算工厂类中使用switch做了大量的分支判断,增加或修改某个运算类就得在这个工厂中修改。(这可以使用反射技术解决)
4.客户端代码:

Operation oper;
oper=OperationFactory.createOperate("+");
oper.NumberA=1;
oper.NumberB=2;
double result=oper.GetResult();

工厂模式主要用来解决对象的创建问题,但当要扩展创建新的对象时,需要修改工厂类。
注:内容摘自《大话设计模式》
  评论这张
 
阅读(163)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017