zoukankan      html  css  js  c++  java
  • Factory Method

    Factory Method(工厂方法)模式主要是为了隐藏对象创建这一任务的复杂性。客户通常不指定需要创建的具体类;客户通常面向接口或抽象类编程。让Factory类来负责创建具体的类型。通常Factory类有一个返回抽象类或者接口的静态方法。客户通常(并非总是)提供某种信息,然后Factory类使用提供的信息来确定创建并返回哪一个子类。

    将创建子类的责任抽象出来所带来的好处是:

      1、允许客户代码完全无需考虑依赖类是如何创建的,遵循DIP(Dependency Inversion Principle)。

      2、把负责对象创建的代码集中起来,如果需要修改对象的生成方式,可以轻松定位并更新,而不会影响到依赖它的代码。

        class Program
        {
            static void Main(string[] args)
            {
                IFactory operFactory = new AddFactory();有别于简单工厂中OperationFactory.CreateOperate("+");后期项目中可以使用AutoFac来解决new的问题。
                Operation oper = operFactory.CreateOperation();从简单工厂中的一步,拆成了两步来生成所需的对象;Operation是抽象类,这里就面向了抽象类进行编程。
                oper.NumberA = 1;
                oper.NumberB = 2;
                Console.WriteLine(oper.GetResult());
                Console.Read();
            }
        }
    
        interface IFactory
        {
            Operation CreateOperation();
        }
    
        class AddFactory:IFactory
        {
            public Operation CreateOperation() {
                return new OperationAdd();
            }
        }
    
        class SubFactory:IFactory
        {
           public Operation CreateOperation(){
               return new OperationSub();
            }
        }
    
        class MulFactory:IFactory
        {
            public Operation CreateOperation() {
                return new OperationMul();
            }
        }
    
        class DivFactory:IFactory
        {
            public Operation CreateOperation()
            {
                return new OperationDiv();
            }
        }
    
        public abstract class Operation
        {
            public double NumberA { get; set; }
            public double NumberB { get; set; }
            public abstract double GetResult();
        }
    
        class OperationAdd:Operation
        {
            public override double GetResult()
            {
                return NumberA + NumberB;
            }
        }
    
        class OperationSub:Operation
        {
            public override double GetResult()
            {
                return NumberA - NumberB;
            }
        }
    
        class OperationMul:Operation
        {
            public override double GetResult()
            {
                return NumberA * NumberB;
            }
        }
    
        class OperationDiv : Operation
        {
            public override double GetResult()
            {
                return NumberA / NumberB;
            }
        }

    工厂方法和简单工厂有些相似,最主要不同的地方就是在于:

    简单工厂通过一个工厂类(OperationFactory)来创建对象,而工厂方法则是通过特定的方法来创建对象。

    IFactory operFactory = new AddFactory();
    针对上面的这条 new AddFactory(),在实际项目中,可以使用AutoFac 这一类的IOC框架来解决主动new的问题。
  • 相关阅读:
    洛谷P2505||bzoj2750 [HAOI2012]道路 && zkw线段树
    洛谷 P3462 [POI2007]ODW-Weights
    Xor-MST Codeforces
    101 to 010 Atcoder CODE FESTIVAL 2017 qual B D
    bzoj2125 最短路
    洛谷P1823 [COI2007] Patrik 音乐会的等待
    洛谷 P1121 环状最大两段子段和
    noip2017 逛公园
    洛谷 P1578 奶牛浴场
    洛谷 P1169||bzoj1057 [ZJOI2007]棋盘制作
  • 原文地址:https://www.cnblogs.com/vichin/p/11584568.html
Copyright © 2011-2022 走看看