有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java只有一个类可以实例化所有其他类

将类的实例化限制为仅一个类的最佳实践是什么?类似于this但在Java中

假设有主类,然后有用户、管理员、视图、数据、客户端等类。只有“Main”类才能实例化所有其他类

因此,如果“User”需要在“Data”类中调用“getUser”方法,它不能实例化“Data”类和调用方法,但它必须调用“Main”类,然后“Main”将实例化“Data”类并将参数传递给其“getUser”方法

我想的是使用私有构造函数、工厂模式等,但不确定这是否会产生我需要的结果。由于复杂性,我认为内部类不是一个好的解决方案

有什么建议吗


共 (2) 个答案

  1. # 1 楼答案

    可以将子类与私有构造函数一起使用: 这样,只有InstanceOnClass可以创建InstanceOnClass。ArgClass和ProtectedClass的构造函数

    public class ProtectedClass{
        //constructor that can only be invoked with an instance of ArgClass 
        public ProtectedClass(InstantiatonClass.ArgClass checkArg){}
    }
    public class InstantiatonClass{
        public static class ArgClass{
        //constructor that can only be invoked from InstantiatonClass
            private ArgClass(){}
        }
    }
    
  2. # 2 楼答案

    在概念层面上有一个明确的答案(因为在技术“如何做”方面已经有了很好的答案):

    Let's say there is Main class, then there are User, Admin, View, Data, Client etc. classes. Only 'Main' class should be able to instantiate all other classes.

    我认为这不是一个好的起点。当然,当遵循领域驱动的设计时,使用factories已经很成熟了

    但有一点需要补充:你仍然希望以合理的方式削减你的“边界”。意思:不要强迫所有对象进入一个工厂。你的对象应该在某种程度上类似于它们的域,并在需要的地方分开

    意思:使用工厂是可以的,但不要强迫自己进入错误的角落,强制要求有一个工厂应该处理你处理的所有类型的物品。取而代之的是:尝试合理地划分对象模型,并尽可能多地拥有概念上合理的工厂

    还请注意,您可能应该区分主要提供数据/信息的对象和最终的“行为”。因此,有必要研究一下使用服务注册中心的想法(例如,如何使用netflix Eureka框架,请参见here

    最后,这里引用tucuxi给出的一个极好的评论:对于小型应用,工厂的设计过于复杂。对于更大的应用程序,我发现有一个名为“Main”的工厂,而不是以一种更正统的方式分担责任是有问题的