Articles of 设计模式

“new A()”和“A.newInstance()”之间有什么区别?

什么时候我更喜欢一个? 下面显示的方法的目的是什么? class A { public static A newInstance() { A a = new A(); return a ; } } 有人可以向我解释这两个电话之间的区别吗?

单身人士与Android中的应用程序上下文?

回顾这篇文章列举了使用单例的几个问题,并看过使用单例模式的Android应用程序的几个例子,我想知道使用Singletons而不是通过全局应用程序状态共享的单个实例是一个好主意(inheritanceandroid.os.Application并获取它通过context.getApplication())。 两种机制都有哪些优点/缺点? 说实话,我希望在这篇文章中使用Web应用程序的单例模式得到相同的答案,不是一个好主意! 但适用于Android。 我对么? DalvikVM有什么不同呢? 编辑:我想就所涉及的几个方面提出意见: 同步 可重用性 测试

Android客户端应用程序中“数据层”的最佳实践

这是一个设计/最佳实践问题.. 我是Android开发新手,基本上是Web /移动解决方案的新手。 所以,我的问题是 – 在组织从远程服务器获取数据的android应用程序结构时,最佳做法是什么? 应该请求服务器进入一个与服务器进行通信的类(获取和发布请求),还是应该将我的请求看作数据源,这意味着每个数据类都为自己管理它? 或者我应该有更多抽象级别 – 一个级别用于获取数据,另一个级别用于使用某些接口但不知道源数据来自哪个? 我很好奇Android开发人员如何处理这些设计问题……

抽象类作为parcelable

基本上我在我的应用程序中有以下结构: 在没有抽象类ProjectItem情况下实现这样的结构会很简单,但在这种情况下我不知道如何实现它。 抽象类ProjectItem需要一个CREATOR因为它应该是可以分配的。 (如in.readTypedList(mProjectItems, ProjectItem.CREATOR);在构造函数Project(Parcel in)中) 但实际上,出于逻辑原因, CREATOR只能在其派生类中实现。 那么,如何实现这个结构以保持类Project parcelable? 编辑 这就是Project的构造函数之一: private Project(Parcel in) { in.readTypedList(mProjectItems, ProjectItem.CREATOR); } 但正如我已经说过的, ProjectItem不应该实现CREATOR

我从SQLiteOpenHelper派生的类变得越来越大

我从SQLiteOpenHelper派生的类在一段时间内变得越来越大。 在发言时间,超过1500行代码不被认为是酷的。 可能有一些优雅的解决方案来防止它的增长,即通过和平分离。 不确定那些和平是什么。 有些人说inheritance上述类是一种不好的做法,因为它会导致数据库创建/升级过程的不当行为。 任何提示? 非常感谢!

Android MVP:在Presenter中安全使用Context

在我的应用程序中,我使用ContentProvider并使用LoaderManager.LoaderCallbacks. 片段(查看) public class ArticleCatalogFragment extends BaseFragment implements ArticleCatalogPresenter.View, LoaderManager.LoaderCallbacks { @Override public Loader onCreateLoader(int id, Bundle args) { return onCreateArticleCatalogLoader(args); } @Override public void onLoadFinished(Loader loader, Cursor data) { data.registerContentObserver(new LoaderContentObserver(new Handler(), loader)); updateUI(data); } private Loader onCreateArticleCatalogLoader(Bundle args) { int categoryId = args.getInt(CATEGORY_ID); Loader loader = new ArticleCatalogLoader(this.getActivity(), categoryId); return loader; } } […]

静态方法还是Singleton,哪一种可供选择?

可能重复: 静态类和单例模式之间的区别? 哪个在Java中更好, 实现公共静态方法,比如 Factory.createLoginRequest() 或实现Singleton模式,如 Factory.getInstance().createLoginRequest() (Boths将返回一个Request对象。) 哪一个更好, 为什么 ?

FragmentTransaction.commit()后不立即调用onCreateView()

我有一个活动,我动态地替换片段: private void goToFragment(Fragment newFragment, String tag) { FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.fragment_container, newFragment, tag); ft.addToBackStack(null); ft.commit(); } 现在,我想访问片段内的视图,这样我就可以在调用goToFragment后立即将数据(我存储在我的活动中)放入其中。 问题是,在片段完全呈现之前,片段的onCreateView没有被调用,至少在我的理解中。 我知道覆盖片段中的onAttach(Activity activity)是一种方法,但是我必须将它专门用于我的活动 – 我只是想避免这种情况,因为我认为片段的不良做法是取决于特定的活动。 据我所知, Fragment没有实现任何监听器(作为主题)。 所以我想我必须创建自己的监听器(使用Observer模式使片段成为主题,活动成为观察者),然后在onCreateView或onAttach完成时调用它,然后最终使用需要设置的数据。 但是,我需要为几个片段执行此操作,因此我必须为每个片段创建一个侦听器,我再次认为这是不好的。 有没有更好/更简单的方法来做到这一点?

Android:覆盖onPause和onResume – 正确的方法

覆盖活动的onPause()和onResume()方法时,调用super.onPause()和super.onResume()的正确位置在super.onPause() ? 在方法开始时还是在结束时?

使用今天,昨天,明天等字符串格式化日期的正确方法

我有一个日期textview。 我的textview包含一个类似2011.09.17的日期字符串。 好吧,我仍然希望拥有它,但我也希望为今天或昨天的某些特定日期添加更多用户友好信息。 例如,如果今天是2011.09.17,我希望我的textview具有昨天的价值,而不是2011.09.16,而今天则是2011.09.17。 好吧,我已经设法做到这一点:),但是以丑陋的方式:(。我做了很多’如果 – >而不是’这真的很丑陋以及我想要添加一些新规则,如果日期是超过一年我想把字符串放在去年左右……我真的需要添加丑陋的逻辑。 我的问题是有更好的方法吗? 这有什么类似于设计模式的东西吗? 建议的方法是什么? 我相信很多人都遇到过这种问题 如果有一些沐浴者的方法比一千个ifs? 如果不是,谢谢你,至少我会停止寻找沐浴者解决方案 任何建议,片段左右将不胜感激 谢谢