首页 > 其他分享 >如何写出最优美的工厂模式

如何写出最优美的工厂模式

时间:2022-11-01 09:46:49浏览次数:92  
标签:优美 args 工厂 CommandAttribute 写出 var assembly null public

提问

如何写出最优美的工厂模式

回答

首先定义什么是最优美
最优美代表着他:面对新增开放,面对修改关闭实践
那么如何实现呢?
我选择使用特性 + 反射

 public ICommand? BuildCommand(string[]? args)
        {
            if (args == null || args.Length != 2)
                throw new ArgumentException("请输入正确的命令和参数");
            ICommand? command = null;
            
            var assembly = Assembly.GetExecutingAssembly();
            if (!Equals(null, assembly))
            {
                var typeInfos = assembly.DefinedTypes.Where(t =>
                    t.CustomAttributes.Select(r => r.AttributeType).ToList().Contains(typeof(CommandAttribute)));
                var typeInfo = typeInfos.FirstOrDefault(r => r.GetCustomAttributes(typeof(CommandAttribute)).Any(w => ((w as CommandAttribute)!).Name.Equals(args[0])));//.GetCustomAttribute(typeof(CommandAttribute)) as CommandAttribute;
                if (!Equals(typeInfo, null))
                {
                    if (typeInfo.FullName != null)
                    {
                        var serviceProvider = ServiceProviderHelper.GetInstance().ServiceProvider;
                        if (serviceProvider != null)
                            command = assembly.CreateInstance(typeInfo.FullName, true, BindingFlags.Default, null,
                                new object[]
                                {
                                    args[1],
                                    serviceProvider.GetService<IQualityControl>() ??
                                    throw new InvalidOperationException()
                                }, null, null) as ICommand;
                    }
                }

            }
            return command;
        }

定义的特性

[AttributeUsage(AttributeTargets.Class)]
    public class CommandAttribute : Attribute
    {
        public string Name { get; set; }

        public CommandAttribute(string name)
        {
            Name = name;
        }
    }

标签:优美,args,工厂,CommandAttribute,写出,var,assembly,null,public
From: https://www.cnblogs.com/wuhailong/p/16846652.html

相关文章

  • namedtuple工厂函数精讲
    首先,我会介绍下使用namedtuple所需要了解的基本概念,然后讲解如何使用namedtuple,最后使用namedtuple来创建一摞纸牌。理解这些之后,就可以权衡利弊,并在生产中使用基本概念......
  • 工厂注入异常
    工厂注入的异常,真是令人蛋疼,仿照构造方法和属性的注入方法,我去注入就因为:————————怪我了,让你找不到进入factory的大门,哎,,,,,!下次注意,马上就该秋招,就这粗心的程度,令人忧......
  • 实验2:简单工厂模式
    本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解简单工厂模式的动机,掌握该模式的结构;2、能够利用简单工厂模式解决实际问题。 [实验任务一]:女娲造人使......
  • 工厂设计模式学习
    转自:https://www.zhihu.com/question/24843188/answer/26905773091.介绍工厂模式的核心思想就是把创建对象和使用对象解藕,由工厂负责对象的创建,而用户只能通过接口来使用......
  • 抽象工厂模式
    概述《设计模式》中对抽象工厂(AbstractFactory)模式的意图描述如下:提供一个接口以创建一系列相关或相互依赖的对象,而无需指定它们具体的类一般抽象工厂中的类结构如......
  • 创建型模式02----原型模型--工厂方法模式 --抽象工厂模式
    文章目录​​原型模型​​​​定义:​​​​优点:​​​​缺点:​​​​原型模式的结构与实现​​​​模式的实现​​​​原型模式的引用场景​​​​创建型模式-工厂模式​......
  • 简单工厂模式
    1.利用面向对象思想实现1.1面向对象的好处通过封装、继承和多态把程序的耦合性降低,用设计模式使得程序更加灵活,容易修改,并易于复用。1.2简单工厂模式静态方法模式(因......
  • 电子元器件工厂的金蝶 ERP 与赛意 WMS 系统数据集成平台进行对接
    项目背景国内某晶振集成电路研发单位,涵盖从产品开发、设计、生产、销售、服务等各个环节。需要全面建成以ERP、WMS、BOM、PLM、DMS、SRM、OA为核心的企业信息系统,支持研......
  • Java设计模式之单例模式、工厂模式、PO模式【多测师_王sir】
    一)、工厂模式工厂模式(FactoryPattern)是Java中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。定义一个创建对象的接口,让其子......
  • 公司新入职一个中级 Java 开发,4 行代码写出了 3 个异常,我真的服了。。
    作者:l拉不拉米链接:https://juejin.cn/post/7031445206152577061一、前言Hello大家好,我是l拉不拉米,今天带来一个真实案例,让大家更深刻的理解空指针异常。公司刚入职了......