• 九.工厂方法模式


    工厂方法模式:

           定义一个用于创建对象的接口,让子类决定实例化哪一个类

           把选择放到了客户端。

           与简单工厂的区别:克服简单工厂违背开放——封闭原则的缺点

                  简单工厂的最大优点在工厂中包含必要的逻辑判断,根据客户端的传入条件动态选择实例化的类,对客户端来说去除了与具体产品的依赖。

    实体和具体方法:

       class Operation

        {

           string num1 = string.Empty;

           string num2 = string.Empty;

           public string Num1

           {

               get { return num1; }

               set { num1 = value; }

           }

           public string Num2

           {

               get { return num2; }

               set { num2 = value; }

           }

           public virtual  string GetResult()

           {

               string result=string.Empty;

               return GetResult();

           }

        }

       class AddOperation : Operation

        {

           public override string GetResult()

           {

               string result;

               result = (Convert.ToDouble(Num1) + Convert.ToDouble(Num2)).ToString();

               return result;

           }

        }

       class SubOperation : Operation

        {

           public override string GetResult()

           {

               string result;

               result = (Convert.ToDouble(Num1) -Convert.ToDouble(Num2)).ToString();

               return result;

           }

    }

    工厂方法:

               interface IFactory

        {

           Operation CreateOperation();

        }

       class AddFactory : IFactory

        {

           public Operation CreateOperation()

           {

               return new AddOperation();

           }

        }

       class SubFactory : IFactory

        {

           public Operation CreateOperation()

           {

               return new SubOperation();

           }

    }

    调用工厂方法:

                       IFactoryoperFactory = new AddFactory();

               Operation oper = operFactory.CreateOperation();

               oper.Num1 = "2";

               oper.Num2 = "1";

               Console.WriteLine(oper.GetResult());

               Console.ReadKey();

  • 相关阅读:
    Web开发学习之路--Eclipse+Tomcat+mysql之初体验
    Android必知必会-Stetho调试工具
    Android开发学习之路--NDK、JNI之初体验
    OpenMP基础----以图像处理中的问题为例
    leetcode 2 Add Two Numbers
    Java在linux下调用C/C++生成的so文件
    OpenCV特征点检测匹配图像-----添加包围盒
    [POJ 1442] Black Box
    [POJ 2019] Cornfields
    [HDU 1806] Frequent values
  • 原文地址:https://www.cnblogs.com/yaoge/p/1815230.html
Copyright © 2020-2023  润新知