Articles of 设计模式

在Android中是否有类似于android.os.Handler的Java类?

Android中的Handler用于在类之间发送消息。 例如: public class Foo { private Handler handler; public Foo(Handler handler) { this.handler = handler; // … } public void fooMethod() { // … handler.obtainMessage(“blah blah”).sendToTarget(); } } 主要: public class Main { private Handler handler; public Main() { handler = new Handler() { @Override public void handleMessage(Message msg) { // handle the message […]

如何实现可配置的单例?

此问题与Android有关,但在其他情况下也可以询问。 我需要创建一个暴露单身人士的图书馆; 或者我想确保只存在我的类的一个实例,并且可以在代码中的任何位置抓取而不传递引用。 但是单身人士需要一些参数。 例如,在Android中,通常需要Context对象。 我还必须确切地说,因为我提供了一个库,所以我希望用户能够轻松操作,而且我无法控制 Android 中的Application类 (此类有时可用于管理整个应用程序的对象实例)。 一种已知的解决方案是执行以下操作: static MySingleton sInstance; MySingleton.getInstance(Context c) { if (sInstance == null) { sInstance = new MySingleton(c.getApplicationContext()); } return sInstance; } 但这很奇怪,因为getInstance的参数实际上只在第一次创建单例时使用。 我可以为单例提供一个setter并要求开发人员正确设置所需的参数,但可能会出现一些奇怪的情况: // Good usage MySingleton.getInstance().setContext(context.getApplicationContext()); MySingleton.getInstance().doSomethingThatRequiresContext(); // OK // Bad usage MySingleton.getInstance().doSomethingThatRequiresContext(); // Error! MySingleton.getInstance().setContext(context.getApplicationContext()); 我可以检查每个方法的开头是否正确配置了单例,并在状态为错误时启动了一些exception,但API使用起来不那么简单: MySingleton.getInstance().setContext(context.getApplicationContext()); try { MySingleton.getInstance().doSomethingThatRequiresContext(); } catch(BadSingletonConfiguration e) { } […]

扩展Android活动的设计模式?

在Android上编程时,我最终编写了一个由其他几个人扩展的父活动。 有点像ListActivity 。 我的父活动扩展了Activity 。 如果我打算使用Map或List ,我不能将我的父活动用作超类 – 子活动显然只能扩展一个活动。 因此,我最终使用与Activity , ListActivity , MapActivity等相同的逻辑编写我的父活动。 我在寻找的是某种特性function/设计模式,在这种情况下会有所帮助。 有什么建议么?

用于在Android中编码许多HTTP请求的良好设计模式

在我的应用程序中,我有很多GET,POST,PUT请求。 现在,我有一个单例类,它保存我下载的数据,并有许多扩展AsyncTask的内部类。 在我的单例类中,我还有一些这样的接口: /** * Handlers for notifying listeners when data is downloaded * */ public interface OnQuestionsLoadedListener { public void onDataLoadComplete(); public void onDataLoadingError(); } 这个模式有什么问题(许多内部类扩展了AsyncTask)吗? 对于每个HTTP调用可能只有1个内部类(1个用于GET,1个用于POST,……)可以更有效地完成吗? 如果是这样,如何在GET请求后决定做什么?

如何为Android视图实现Decorator模式

注意:实际问题在What my questions are部分。 提供其他部分是为了更好地概述问题。 任务 我想使用Decorator设计模式来装饰Android视图。 对于我的问题,我将使用装饰ViewPager作为示例,但我相信解决方案将更加通用。 我为什么需要它 我希望能够在我的不同解决方案中对标准视图重用不同的扩充。 例如,现在我有定时器切换ViewPager和ViewPager ,当用户到达终点时通知我。 有了这个解决方案,我的目标是在我的下一个解决方案中添加自动切换通知ViewPager ( ViewPager我当前的扩展组合在一起)。 装饰者模式正是为了这个。 我当前的方法是什么 我已经在ViewPager中包装了目标ViewPagerDecorator 我还做了装饰器的所需扩展 – AutoSwitchViewPager和NotifyOutOfBoundsViewPager (基于此 )。 现在我甚至可以做到 new AutoSwitchViewPager(new NotifyOutOfBoundsViewPager(viewPager)) 。 现在我想弄清楚如何在布局中放置这个运行时创建的视图。 我目前正试图弄清楚我是否可以从布局ViewPager普通的ViewPager替换为将其xml属性传播到装饰视图。 我的问题是什么 有没有办法将xml属性从布局定义的视图复制到运行时构造的(至少是LayoutParameters ) 另一种方法是使用ViewStub ,但我没有find一种方法来使用完全运行时构建的东西(不使用xml Layout)来ViewStub 。 有这样的方式吗? 我读了什么 我偶然发现了这些相关资源: 装饰Android视图 – 这并不是完全装饰视图,因为装饰器不会订阅视图的不同事件。 装饰需要通过特殊的触发方法触发。 然而,我所瞄准的装饰确实需要充当装饰类的完整扩展。 装饰模式Android – 这里的装饰再次通过特殊方法触发 装饰一个Android活动 – 我对ComonsWare的所有尊重我离他的陈述很远。 另一方面,我相信Android中的视图允许您比活动更多的运行时修改,所以我仍然是我的情况似乎是合理的。

Android和OOP – 全局variables与片段中的inheritanceGetters

在Fragment中,每次需要引用活动或创建全局variables“mActivity”并使用它时,都应该调用getActivity()。 基本上你已经有了一个Activity对象(getActivity()),感觉就像创建一个全局(mActivity)是代码重复并创建一个不需要的额外引用。 但是使用getActivity()到处都看起来很可怕并且每次做多个方法调用都会感觉不对(性能?)。 // Pseudo Android public class MyFragent extends Fragment { private Activity mActivity; // Global public void onActivityCreated(Bundle b){ mActivity = getActivity(); } public void onClick(View v){ randomMethodTakingActivity(mActivity); // or randomMethodTakingActivity(getActivity()); } private void someMethod(){ randomMethodTakingActivity(mActivity); // or randomMethodTakingActivity(getActivity()); } private void anotherMethod(){ mActivity.someCallback(); // or getActivity().someCallback(); } } 这也与getApplication()或getView()相关; 我已阅读Coding for Performance,但看不到任何相关内容。 […]

在几个活动中重用Android AsnycTask的模式?

我的项目中有几个Activity子类,每个子类都调用一个基于SOAP的Web服务,处理并显示结果。 SOAP序列化,调用处理以及将结果解析为各种POJO对象都封装在MyWebService类中。 该类通过AsyncTask执行实际的Web服务调用。 为了能够将结果传递回调用的Activity子类,我想我强制所有这些活动都应该实现一个WebServiceResultProcessor接口,定义一个函数(processWebServiceResults)作为AsyncTask的回调,从onPostExecute调用。 我还想在Web服务调用期间显示ProgressDialog。 这是我的问题。 为了能够显示ProgressDialog(来自MyWebService或它的AsyncTask),我需要传递对调用者Activity的Context的引用。 并且为了能够从AsyncTask执行回调函数,我还需要传递相同的对象引用,但这次是作为WebServiceResultProcessor。 这在我看来是一种代码气味,两次传递相同的对象,但无法看到任何方式。 我可以创建一个新的基类,扩展Activity类并从扩展类强制inheritance,而不是接口,但这意味着我将使用此MyWebService类排除ListActivity等。 有一个更好的方法吗?

在Android项目上实现DAO模式

我正在开发Android 3.1及更高版本。 我有以下包裹: es.viacognita.models包含用于存储使用Web服务检索的数据的类。 当我获得所有Web服务数据时,我需要将其插入数据库中。 为了使它正确,我认为使用DAO模式,但我不知道如何做到这一点。 如果我使用DAO模式,我可能需要使用es.viacognita.models类吗? 我认为这些类将是DAO类,不是吗? 我必须实现插入,更新或删除的地方? 在DBManager类?

Android架构模式

我刚开始使用android开发,我正在尝试开发我的第一个应用程序,我实际上要发布它。 我有Java的编程背景和一些模式的知识但是我不知道在开发Android应用程序时我应该坚持哪些模式。 还有在哪里放线程。 我正在开发一个应用程序,它通过PHP脚本不断地从远程数据库加载数据并在UI上显示它们。 我将应用程序划分为几层 – 表示层,域层/服务层和数据源层。 在他们之间我创建了外观来访问下面的层的服务。 根据其他一些模式,我真的不知道我是否应该坚持这个结构或完全重建这个应用程序。 最好在开发开始时find它,而不是在以后强制重建整个应用程序。 所以,如果有人可以提供我可以使用的建筑模式的一些链接或在这里写一些简短的东西,我真的很感激!

首选项/设置的Android模式

大多数应用都有某种偏好或用户设置,可以通过SharedPreferences存储。 我第一次为用户编辑其设置的活动实现非常简单:几个输入字段和一个“保存”按钮。 这既不漂亮也不易扩展。 我见过的android系统设置和许多应用程序倾向于在ListViews中布局他们的首选项编辑。 我的第二种方法试图模仿这一点:ListActivity和每个项目必须提供它自己的布局,因为我想存储不同types的值(一些是数字,一些是布尔单选按钮)。 我觉得实现这个很麻烦,现在我想知道我是否缺少一些明显的设计模式?