是否有任何创建设计模式允许实例化全新对象(如新编写的那样),而无需在现有代码中的某处添加new
语句?
答案 0 :(得分:1)
我在这里想到的一件事是,有人需要为你新写的班级做new
。如果你不这样做,那么可能需要一些框架来做到这一点。
我记得我在使用Java Spring的一个副项目中做过类似的事情。我有一个接口和多个实现。我的项目需要迭代所有实现做一些处理。现在为此我甚至寻找一些解决方案,我不必手动执行该特定类的实例化或该特定类的一些显式连接。所以Spring帮助我通过@Autowired
注释来做到这一点。它动态地注入了该接口的所有实现。例如: -
@Autowired
private List<IMyClass> myClassImplementations;
现在在上面的示例中,我可以简单地遍历注入的实现列表,每次编写新实现时都不需要对新实现进行实例化。
但我认为在大多数情况下使用这种方法很困难(即使它符合我的情况)。在一般情况下,我宁愿使用Factory模式,并尝试使用它来创建新实例。我知道这需要新的,但在我的看法中,它的工程方式是自动创建和注入的对象有点额外的开销。
答案 1 :(得分:1)
要解决的主要问题是如何识别要实例化的类。我知道并且已经使用了三种通用模式来发现类,我将按类型调用注册,自注册和发现。我不知道它们是用正式的模式描述写的。
注册:每个想要被发现的类都注册在框架可以找到它的地方:
自行注册:每个想要被发现的类都可以在单例列表中注册自己。诀窍是班级如何知道何时这样做。
require
包含该类的文件。按类型发现:每个要发现的类都会扩展或实现框架定义的类型,或者以特定方式命名。 Spring自动装配类注释是此模式的另一个版本。
有几种方法可以在Java(here's one SO question,here's another)和Ruby中查找来自给定类型的类。与自注册一样,在类动态加载类的语言中,必须要做的事情是确保在向运行时询问可用的类之前加载类。