1
5
也许你可以用 Module::Pluggable ?这样就不再需要注册了。 我以前采用的方法是使用module::pluggable来加载我的子模块(这允许我通过简单地编写和安装它们来添加新的子模块)。每个子类都有一个构造函数,该构造函数要么返回一个受祝福的对象,要么返回一个未定义的对象。你循环你的插件直到你得到一个对象,然后返回它。 类似:
有 Class:Factory 但这可能有点超出你的需要。 |
2
1
似乎你想让一个类同时成为一个基类和一个工厂。不要。使用两个单独的类。像这样:
然后像这样使用:
这样,你的基础类就不需要知道你的孩子的课程,只有你的工厂知道。而且,子类也不需要互相了解,只有工厂需要知道要尝试哪个子类的细节,以及按照哪个顺序。 |
3
0
您可以在类foo中实现搜索现有子类的任意查找算法。可能基于与子类一起提供的配置文件,或者您可能想到的任何其他机制。 然后,类foo将在运行时检测现有的客户机类,并依次调用它们。 另外,您可以缓存查找结果,并接近您自己描述的注册表解决方案。 |
4
0
如果您对不包含chilidren信息的父类以及将建立适合类本身的子类的任务委托给它的方法发表意见,那么从父类中考虑类选择并为此任务创建一个单例可能是正确的。 至少这是我的偏好…从这个例子中,您当前的父类(可能在子类中具有一些公共功能)可能会变为抽象类或接口。 然后,singleton可以管理所有子类的构造和它们的分发(如果它们不起作用,克隆它们?)…此外,可以将子类移动到单独的dll中以促进分离。 抱歉,这不是一个直接的解决方案。 我以前是这样做的,在单例中管理一个类列表,就像您在这里一样。单件背后的想法是,如果你想使用任何昂贵的反射,你只需要做一次。 |
Vedant · 如何解决python啦啦队长问题?[已关闭] 2 年前 |
cobby · 在战略模式中使用工厂模式? 2 年前 |
Nobody · Java中带while循环的三角形模式 2 年前 |
Eduard Stefanescu · 如何在层之间传输异常? 6 年前 |
D. Schreier sanjeev · 对于目录中的每个类 6 年前 |
Tanvi Jaywant · 如何重载类 6 年前 |