设计模式--简单工程模式

对于大话设计模式这本书,之前有看过,但是一直没有仔细的看,也没有记笔记,跟没有在工作中用到过设计模式,除了简单工厂,工厂模式外。下面就根据再次看大话设计模式整理出来实例做分析,主要是书中的例子。如有不到之处还请各位大神指出。

简单工厂模式和继承是分不开的  我们还是以计算器为例:

1.运算类

    是一个基类,里面包含需要参与计算的两个参数,和一个获取计算结果的方法

 1  /// <summary>
 2     /// 运算类    
 3     /// </summary>
 4     public class Operation
 5     {
 6         public double NumberA { get; set; }//第一个数
 7         public double NumberB { get; set; }//第二个数
 8 
 9         /// <summary>
10         /// 返回计算结果
11         /// </summary>
12         /// <returns></returns>
13         public virtual double GetResult() 
14         {
15             double result = 0;
16             return result;
17         }
18     }

2.实现类

实现基类的方法,并各自实现自己的计算

/// <summary>
    /// 加法类   
    /// </summary>
    public class OperationAdd : Operation//继承运算类
    {
        public override double GetResult()
        {
            double result = NumberA + NumberB;
            return result;
        }
    }
 /// <summary>
    /// 减法类
    /// </summary>
    public class OperationSub:Operation//继承运算类
    {
        public override double GetResult()
        {
            double result = NumberA - NumberB;
            return result;
        }
    }
 1     /// <summary>
 2     /// 乘法类
 3     /// </summary>
 4     public class OperationMul : Operation//继承运算类
 5     {
 6         public override double GetResult()
 7         {
 8             double result = NumberA * NumberB;
 9             return result;
10         }
11     }
 1     /// <summary>
 2     /// 除法类
 3     /// </summary>
 4     public class OperationDiv:Operation //继承运算类
 5     {
 6         public override double GetResult()
 7         {
 8             double result = 0;
 9             if (NumberB == 0)
10                 throw new Exception("除数不能为0");
11             result = NumberA / NumberB;
12             return result;
13         }
14     }

以上为各自的实现类,都调用了父类的两个参数,重写父类方法并有各自的实现,那么我们如何来动态的创建实例呢,这块就用到了我们的工厂,下面看看工厂代码:

 1      /// <summary>
 2     /// 运算工厂
 3     /// </summary>
 4     public class OperationFactory
 5     {
 6         /// <summary>
 7         /// 根据参数创建需要的实例
 8         /// </summary>
 9         /// <param name="operationType">需要创建实例 的类型</param>
10         /// <returns>返回创建好的实例</returns>
11         public static Operation CreateOperation(string operationType) 
12         {
13             Operation operat = null;
14             switch (operationType)
15             {
16                 case "+":
17                     operat = new OperationAdd();
18                     break;
19                 case "-":
20                     operat = new OperationSub();
21                     break;
22                 case "*":
23                     operat = new OperationMul();
24                     break;
25                 case "/":
26                     operat = new OperationDiv();
27                     break;
28             }
29 
30             return operat;
31         }
32     }

看以上为工厂方法,需要调用的时候只需要传递不同的操作计算类型即可获得实例:如以下调用

    public static void Main(string[] args)
        {
            //创建加法计算实例 看括号可传递一个运算类型就可以  不同的实例不    用创建多个可根据参数动态创建
            Operation operat = OperationFactory.CreateOperation("+");//操作符可根据需求动态传递
            operat.NumberA = 13;//第一个参数赋值
            operat.NumberB = 15;//第二个参数赋值
            Console.WriteLine("{0}加{1}等于:{2}", operat.NumberA, operat.NumberB, operat.GetResult());
        }

以上为加法计算  其他计算只需修改工厂创建参数即可

运算结果:

总结:简单工厂模式即把对象的创建放到一个工厂类中,通过参数来创建不同的对象。

便于以后的调整对给系统带来更大的可扩展性和尽量少的代码修改。给你系统带来更大的可扩展性和尽量少的修改量。 

原文地址:https://www.cnblogs.com/binw/p/3914853.html