Java 在Android中避免使用全局变量的更好方法是什么?
据我所知,使用全局变量可能会因为代码的紧密耦合或测试问题而让代码难闻 在我的情况下,我想使用一些具有IOC/DI的对象,这些对象可能依赖于片段的任何活动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
因此,我创建了一个名为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库。感谢您的指导,我将查看这两个框架。