Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Object 是否存在实例化新编写的类的创造性设计模式?_Object_Design Patterns - Fatal编程技术网

Object 是否存在实例化新编写的类的创造性设计模式?

Object 是否存在实例化新编写的类的创造性设计模式?,object,design-patterns,Object,Design Patterns,是否有任何创造性的设计模式允许在不必在现有代码的某个地方添加new语句的情况下实例化全新的对象(如新编写的对象)?我认为有一件事需要有人对新编写的类执行new。如果您没有这样做,那么可能有一些框架需要这样做 我记得我在一个使用JavaSpring的辅助项目中做过类似的事情。我有一个接口和多个实现。我的项目需要迭代所有的实现,并进行一些处理。现在,对于这个问题,我甚至在寻找一些解决方案,我不必手动执行该特定类的实例化或该特定类的显式连接。所以Spring通过@Autowired注释帮助我做到了这一

是否有任何创造性的设计模式允许在不必在现有代码的某个地方添加
new
语句的情况下实例化全新的对象(如新编写的对象)?

我认为有一件事需要有人对新编写的类执行
new
。如果您没有这样做,那么可能有一些框架需要这样做

我记得我在一个使用JavaSpring的辅助项目中做过类似的事情。我有一个接口和多个实现。我的项目需要迭代所有的实现,并进行一些处理。现在,对于这个问题,我甚至在寻找一些解决方案,我不必手动执行该特定类的实例化或该特定类的显式连接。所以Spring通过
@Autowired
注释帮助我做到了这一点。它动态地注入了该接口的所有实现。例如:-

@Autowired
private List<IMyClass> myClassImplementations;
@Autowired
私有列表MyClassifications的实现;
现在,在上面的示例中,我可以简单地迭代注入的实现列表,而不必在每次编写新实现时都对新实现进行实例化


但我认为在大多数情况下,使用这种方法是很困难的(即使它适合我的情况)。我宁愿在一般情况下使用工厂模式,并尝试使用它来创建新实例。我知道这需要新的,但在我的感知工程中,自动创建和注入对象的方式有点额外的开销。

要解决的主要问题是如何识别要实例化的类。我知道并使用了三种通用模式来发现类,我称之为注册、自注册和按类型发现。我不知道它们已经被写在正式的模式描述中

注册:每个希望被发现的类都注册在框架可以找到它的地方:

  • 类名放在环境变量或Java系统属性、文件等中
  • 有些代码在程序执行的早期将类或其名称添加到单例列表中
自我注册:每个想要被发现的类都注册自己,可能在一个单例列表中。诀窍是如何让学生知道什么时候做

  • 该类可能必须在程序早期由某些代码显式引用(例如)
  • 在Ruby中,定义类的代码可以在定义类时在某处注册该类(或执行任何其他操作)。只要
    需要包含类的文件就足够了
按类型发现:希望被发现的每个类都扩展或实现了框架定义的类型,或以特定方式命名。Spring autowiring类注释是此模式的另一个版本


在Java(,)和中,有几种方法可以查找从给定类型派生的类。与自注册一样,在动态加载类的语言中,在询问运行时哪些类可用之前,必须先确保类已加载。

您的意思是不必更改程序以引用新类吗(不仅仅是你不应该说
new
)?或者你的问题真的是关于如何实例化一个你有引用但却一无所知的类?太棒了!我从来都不知道那些语言结构的存在,而它们正是我在寻找的。(顺便说一句,很抱歉,接受晚了,生活遇到了阻碍)