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的问题。
  • 相关阅读:
    标准差和方差
    Prism+WPF使用DependencyInjection实现AutoMapper的依赖注入功能
    集合框架3-Arrays 类
    集合框架2- ArrayList
    Windows 下安装 SSH 服务(Openssh)
    利用 Spring Boot 中的 @ConfigurationProperties,优雅绑定配置参数
    Spring系列.Environment接口
    (4)ElasticSearch在linux环境中搭建集群
    (1)RabbitMQ在Docker上安装
    说一说Web端侧AI
  • 原文地址:https://www.cnblogs.com/vichin/p/11584568.html
Copyright © 2011-2022 走看看