zoukankan      html  css  js  c++  java
  • C#学习笔记-工厂模式

    题目:计算器

    解析:工厂方法(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。

    定义运算类:

     1 class Operation
     2     {
     3         private double _numberA = 0;
     4         private double _numberB = 0;
     5 
     6         public double NumberA
     7         {
     8             get
     9             {
    10                 return _numberA;
    11             }
    12 
    13             set
    14             {
    15                 _numberA = value;
    16             }
    17         }
    18 
    19         public double NumberB
    20         {
    21             get
    22             {
    23                 return _numberB;
    24             }
    25 
    26             set
    27             {
    28                 _numberB = value;
    29             }
    30         }
    31 
    32         public virtual double GetResult()
    33         {
    34             double result = 0;
    35             return result;
    36         }
    37     }
    View Code

    继承于运算类的具体运算的实现:

     1 class OperationAdd : Operation
     2     {
     3         public override double GetResult()
     4         {
     5             double result = 0;
     6             result = NumberA + NumberB;
     7             return result;
     8         }
     9     }
    10 
    11     class OperationSub : Operation
    12     {
    13         public override double GetResult()
    14         {
    15             double result = 0;
    16             result = NumberA - NumberB;
    17             return result;
    18         }
    19     }
    20 
    21     class OperationMul : Operation
    22     {
    23         public override double GetResult()
    24         {
    25             double result = 0;
    26             result = NumberA * NumberB;
    27             return result;
    28         }
    29     }
    30 
    31     class OperationDiv : Operation
    32     {
    33         public override double GetResult()
    34         {
    35             double result = 0;
    36             if (NumberB == 0)
    37                 throw new Exception("除数不能为0");
    38             result = NumberA / NumberB;
    39             return result;
    40         }
    41     }
    View Code

    工厂方法,接口:

    1 interface IFactory
    2     {
    3         Operation CreateOperation();
    4     }
    View Code

    工厂方法,分别子类:

     1 class AddOperation : IFactory
     2     {
     3         public Operation CreateOperation()
     4         {
     5             return new OperationAdd();
     6         }
     7     }
     8 
     9     class SubOperation : IFactory
    10     {
    11         public Operation CreateOperation()
    12         {
    13             return new OperationSub();
    14         }
    15     }
    16 
    17     class MulOperation : IFactory
    18     {
    19         public Operation CreateOperation()
    20         {
    21             return new OperationMul();
    22         }
    23     }
    24 
    25     class DivOperation:IFactory
    26     {
    27         public Operation CreateOperation()
    28         {
    29             return new OperationDiv();
    30         }
    31     }
    View Code

    主函数:

     1 static void Main(string[] args)
     2         {
     3             //工厂模式自己内部确定了改实例化哪个类,所以要发生变动,只需要在最外面这个地方变动即可
     4             IFactory operFactory = new AddOperation();
     5 
     6             Operation oper = operFactory.CreateOperation();
     7             oper.NumberA = 9;
     8             oper.NumberB = 5;
     9             double result = oper.GetResult();
    10 
    11             Console.WriteLine(result);
    12 
    13             Console.Read();
    14         }
    View Code

    注:文中所有代码及知识点均来自于《大话设计模式》,本人属于边学边看边敲代码边总结的阶段。

  • 相关阅读:
    后海日记(6)
    后海日记(6)
    后海日记(5)
    后海日记(5)
    TCP 连接的握手信息详解
    TCP 连接的握手信息详解
    java枚举类型的优势在哪里?--一个实例
    java枚举类型的优势在哪里?--一个实例
    网络基础之网络协议篇
    mysql之innodb引擎的共享表空间和独立表空间
  • 原文地址:https://www.cnblogs.com/Aries-rong/p/7494350.html
Copyright © 2011-2022 走看看