Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.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
Java 在Android中避免使用全局变量的更好方法是什么?_Java_Android_Oop_Design Patterns - Fatal编程技术网

Java 在Android中避免使用全局变量的更好方法是什么?

Java 在Android中避免使用全局变量的更好方法是什么?,java,android,oop,design-patterns,Java,Android,Oop,Design Patterns,据我所知,使用全局变量可能会因为代码的紧密耦合或测试问题而让代码难闻 在我的情况下,我想使用一些具有IOC/DI的对象,这些对象可能依赖于片段的任何活动 因此,我创建了一个名为Global的类,并放置静态变量 public class Global { private static ConvertStrategy convertStrategy; private static EntityController entityController; public stat

据我所知,使用全局变量可能会因为代码的紧密耦合或测试问题而让代码难闻

在我的情况下,我想使用一些具有IOC/DI的对象,这些对象可能依赖于片段的任何活动
因此,我创建了一个名为Global的类,并放置静态变量

public class Global {

    private static ConvertStrategy convertStrategy;
    private static EntityController entityController;

    public static void init(ConvertStrategy convertStrategy, EntityController entityController){
        Global.convertStrategy = convertStrategy;
        Global.entityController= entityController;
    }

    public ConvertStrategy getConvertStrategy(){
        return convertStrategy;
    }

    public EntityController getEntityController (){
        return entityController;
    }
}
然后我可以在主活动中初始化它

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(...);


    Global.init(new OfflineConvertStrategy() , new OfflineController()); 
    ...
    ...
}
所以很明显,现在我使用的是离线算法,然后其他日子我可以为在线版本创建其他类型的策略或控制器,而无需更改任何依赖于片段或活动的代码,这就是IOC/DI对我的好处

对不起,我的描述不好,希望这张图片能具体化:

但是当IOC/DI对象数量增加时,我觉得开始很难维持

例如

    public class Global {
    public static Resources resources;
    public static DateConvertStrategy dateConvertStrategy;

    private static MemberController memberController;
    private static ProjectSearcher projectSearcher;
    private static OfficeController officeController;
    private static EntityController<Project> projectController;
    private static EntityController<IssueType> issuetypeController;
    private static EntityController<Issue> issueController;
    private static EntityController<IssueComment> issueCommentController;
    private static EntityController<Timeline> timelineController;
    private static EntityController<MemberIdCardModel> memberIdCardController;
    private static EntityController<TodoTask> todotaskController;
    ...
    ...
}
公共类全局{
公共静态资源;
公共静态数据转换策略;
私有静态成员控制器成员控制器;
专用静态ProjectSearcher ProjectSearcher;
专用静态OfficeController OfficeController;
专用静态实体控制器;
专用静态实体控制器issuetypeController;
专用静态实体控制器issueController;
专用静态实体控制器issueCommentController;
专用静态实体控制器timelineController;
私有静态实体控制器成员IDCardController;
专用静态实体控制器到ToTaskController;
...
...
}
我想我在使用IOC/DI和全局变量时有点过量了


请分享你的想法。

使用
共享首选项
我不知道如何使用共享首选项来实现这一点,你能举个例子吗?共享首选项并不是你想要的-它们只是一种将数据写入磁盘的快速方法,而无需处理Java可怕的文件IO。您需要的是像Dagger或Butterknife这样的DI库。感谢您的指导,我将查看这两个框架。