开发一个jogl应用程序,这是我们核心类结构的一部分
主 jFrame
-
查看器(用于渲染(
-
输入侦听器
-
视杆(用于摄像机/投影控制(
-
图形(保存节点/网格(
- 图标处理程序(展开/折叠具有子节点的节点(
-
因此,如果我想在图标处理程序中调用methodX(((基本上是表示处理程序的纹理,对于所有节点都是一样的(,我必须调用:
Main.instance.getViewer().getGraph().getIconHandler().methodX()
其中 instance 是一个静态变量,用于保存主 jFrame 的实例
鉴于它们都是:
1( 实例化一次
2(在开始时
3(应该一直在那里
4(理论上,没有竞争条件的问题,我们在添加/读取/修改/删除节点时在较低级别使用java.util.concurrent.locks.ReentrantReadWriteLock
的实例分配给每个相应类中的静态变量是危险/糟糕的设计吗?
这样,如果我想访问相同的methodX()
我只需致电
IconHandler().instance.methodX()
Ps:我阅读了有关静态变量((的其他一些问题,但我发现它们非常通用,我的关于核心部分。
只要你知道每个类只需要一个实例,这就可以了。这称为单例,是一种非常著名的设计模式。
问题是你可能无法保证你只需要类的一个实例。单一实例适用于数据连接或文件读取器等功能,其中对应访问数据的实例数有内置限制。
您滥用 static 关键字作为访问类实例的懒惰方式,当您扩展程序以包含这些类的多个实例时,它会回来咬您。如果你认为你只需要一个实例 - 你不能保证它永远不会改变。