zoukankan      html  css  js  c++  java
  • 谈 简单工厂模式

    面试的时候被考到了 ,当时一下有点乱没写出来   回来查了一下资料从新整理了一下 ,希望对以后能够以此为戒。

    说到设计模式 在编程中平时很少用到 ,也是一个比较抽象的概念 一时间不知道怎么去理解,总结一下 学习一个东西 一般 5 W 2 H    5个w: what   why  where  who  when  2h: how  how much

    这里常用的  what  : 什么东西    where 在什么地方用   when 什么时候用   how 怎么用

    1  什么是工厂模式 what :

    从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
     
    简单的说就是 有个一个对象工厂 来决定 具体实例化哪个对象  
     
    2. 在什么时候会用到  when:
    访问数据库的时候  不同的数据  access  sql sever  oracle   ,如果之前项目是 sql server  后来改成  Access   那么原来的项目改动就很大  ,需要重新写所有的数据库访问的代码,  很不方便, 那么我们就可以用工厂类 来 返回制定数据库操作对象,然后来进行多种 数据库的操作 ,只需要修改配置就可以了
     
    3.怎么用  How:
    引用 《大话设计模式》的例子    加 减 乘  除  运算 
    //定义运算类
     //定义运算类
          public class Operation
          {
                private string strNumberA;
                private string strNumberB;
                public string NumberA
                {
                      get { return this.strNumberA; }
                      set { this.strNumberA = value; }
                }
                public string NumberB
                {
                      get { return this.strNumberB; }
                      set { this.strNumberB = value; }
                }
    
                public virtual double DoResult()
                {
                      double ret = 0;
                      return ret;
                }
          }
    //定义不同符号的子类继承
               
          //加法运算
          public class AddOperation : Operation
          {
                public override double DoResult()
                {
                      double dRet = Convert.ToDouble(this.NumberA) +Convert.ToDouble(this.NumberB);
                    return dRet;
                }
          }
     
    减法运算类
       //减法运算类
          public class SubOperation : Operation
          {
                public override double DoResult()
                {
                      //return base.DoResult();
                      double dRet = Convert.ToDouble(this.NumberA) - Convert.ToDouble(this.NumberB);
                      return dRet;
                }
          }

     

    乘法运算类
      //乘法运算类
    
          public class MulOperation : Operation
          {
                public override double DoResult()
                {
                      double dRet = Convert.ToDouble(this.NumberA) * Convert.ToDouble(this.NumberB);
                      return dRet;
                }
               
          }
    除法运算
     //除法运算
         
          public class  DevOperation:Operation
          {
                public override double DoResult()
                {
    
                      double dRet = Convert.ToDouble(this.NumberA) / Convert.ToDouble(this.NumberB);
                      return dRet;
                      //return base.DoResult();
                }
          }
    工厂类
        public class OperationFactory
          {
                public static Operation GetOperation(string operate)
                {
                      Operation opr = null;
                      switch (operate)
                      {
                            case "+":
                                  opr = new AddOperation();break;
                            case "-":
                                  opr = new SubOperation(); break;
                            case "*":
                                  opr = new MulOperation();break;
                            case "/":
                                  opr = new DevOperation(); break;
                       }
                      return opr;
                }
          }
     以后只要调用 OperationFactory.GetOperation(运算符)  就会得到 运算对象  ,这样以后添加其他的预算也非常方便,添加一新的类,给GetOperation 添加一个 case 分支就可以了   调用 obj. DoResult()  返回结果 就可以了,实现面向对象的,封装和多态
     
     
     
     
     
     
  • 相关阅读:
    前端开发之初探五
    前端开发之初探四
    前端开发之初探三
    漫谈
    前端工程师的发展之路
    SVG
    前端开发之初探一
    前端开发之初探二
    详解浏览器缓存
    webStroage案例
  • 原文地址:https://www.cnblogs.com/hzy168/p/2983747.html
Copyright © 2011-2022 走看看