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的问题。
  • 相关阅读:
    SHELL编程之执行环境----邹立巍的博客
    linux内核分析系列--百度
    Linux模式设计系列( 内核与应用关联思考)
    Linux内核源代码情景分析系列
    Linux内核学习和研究及嵌入式(ARM)学习和研究的开放文档
    实验楼内核分析 +图
    《Linux内核修炼之道》 系列
    和菜鸟一起学linux内核源码之基础准备篇 系列 体系结构图
    实验楼在线算法学习
    linux-0.11内核 调试教程+GCC源代码
  • 原文地址:https://www.cnblogs.com/vichin/p/11584568.html
Copyright © 2011-2022 走看看