android-cn / android-discuss

Android 问题交流讨论坛, 微信公众号:codekk, 网站:
https://github.com/android-cn/android-discuss/issues
Apache License 2.0
4.08k stars 536 forks source link

[分享]常见设计模式的 Java 实现 #2

Open Trinea opened 9 years ago

Trinea commented 9 years ago

资料可见:https://github.com/iluwatar/java-design-patterns

Android 系统源码到处就是优秀的设计模式,你了解多少?评论举例看看

miao1007 commented 9 years ago

我来开个头,关于Builder design pattern

AlertDialog

AlertDialog dialog = new AlertDialog.Builder(context)
        .setTitle("dialog title")
        .setMessage("this is a message")
        .setIcon(R.drawable.ic_launcher)
        .setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
          @Override public void onClick(DialogInterface dialog, int which) {

          }
        }).setPositiveButton("OK", new DialogInterface.OnClickListener() {
          @Override public void onClick(DialogInterface dialog, int which) {

          }
        }).create();

    //TODO :  dialog.show();

Picasso

Picasso也是由Sqaure公司出品的一款图片异步加载框架。

使用方法简单的

Picasso picasso = new Picasso.Builder(getActivity())
        .loggingEnabled(true)
        .indicatorsEnabled(true)
        .listener(new Picasso.Listener() {
          @Override public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {

          }
        }).build();

    //TODO use picasso

Retrofit

Retrofit是在Android开源界非常有名的RESTful框架,使用接口(interface)与注解(annotation)定义各种http请求,还可以异步回调UI操作,可以说是非常强大的一款框架。

看如下代码

RestAdapter adapter = new RestAdapter.Builder()
        .setEndpoint(HeadlineService.END_POINT)
        .setLogLevel(RestAdapter.LogLevel.FULL)
        .setRequestInterceptor(new RequestInterceptor() {
          @Override public void intercept(RequestFacade request) {
            //TODO: intercept some request
          }
        }).setErrorHandler(new ErrorHandler() {
          @Override public Throwable handleError(RetrofitError cause) {

            //TODO: return some error 
            return null;
          }
        }).build();

        //TODO: use adaper 

这里的Builder是如何实现的呢?我们打开源码,同样是按照三个流程实现的。

Labmem003 commented 9 years ago

推荐一个资料:https://github.com/simple-android-framework/android_design_patterns_analysis