前言

前言

欢迎阅读本书。本书是一份全面的指南,介绍如何在应用程序中使用久经考验的编程方法——设计模式。设计模式为编程人员面临的许多开发问题提供了一种优雅又合理的方法,这些方法作为指南,为找到问题的解决方案提供了一条清晰的路径。虽然应用设计模式本身并不能保证最佳实践,但它极大地协助推进这一过程,并使设计缺陷更容易被发现。设计模式可以在很多平台上实现,且可以使用多种编程语言编写。一些代码库的内部实现也应用了设计模式,比如许多读者熟悉的Java的Observer类和Observable类。我们将要探索的Android SDK也充分利用了许多模式,例如工厂、建造者和监听器(实际上就是观察者)。虽然我们会介绍这些内置的设计模式,但本书将主要探讨如何构建我们自己的定制模式,并将其应用于Android开发。

本书并非依次介绍每种设计模式,而是从开发者的角度,基于应用程序开发的各个方面探讨在构建Android应用程序过程中可能出现的设计模式。为了讲解更清晰,我们将聚焦于一个旨在支持小型企业的假想应用程序,从应用程序的构想开始讲起,直到最终应用程序发布,中间介绍诸如用户界面(UI)设计、内部逻辑以及用户交互之类的主题。其中的每一步,我们都将探索与该过程相关的设计模式。首先以抽象的形式探索该模式,然后将其应用于特定的情况。在本书结尾,我们将学会如何将设计模式应用于Android开发的各个方面,以及如何使用它们协助实现最佳实践。设计模式的概念比任何特定模式本身都重要,模式可以且应该适用于我们的特定目的。通过这种方式学习应用程序开发,我们甚至可以独立创造出属于自己的设计模式。

本书内容

第1章,设计模式,介绍开发环境以及两种常见的设计模式——工厂模式和抽象工厂模式。

第2章,创建型模式,介绍Material Design和界面设计,探索设计支持库和建造者设计模式。

第3章,Material模式,介绍Android用户界面和一些非常重要的Material Design组件,例如应用程序栏和滑动式导航抽屉。此外还会介绍菜单和动作图标及其实现方式,以及如何使用抽屉的监听器来检测用户活动。

第4章,布局模式,前一章已提及,这一章会进一步探讨Android布局设计模式,以及如何使用重力和权重来创建可以在各种设备上使用的布局。我们将学会如何处理Android设备方向以及屏幕尺寸和形状的差异。这一章也会介绍和演示策略模式。

第5章,结构型模式,深入研究设计库,并创建一个包含RecyclerViewCoordinatorLayout布局。完成此布局需要使用适配器设计模式(首先是内部版本的适配器,然后构建我们自己的适配器),以及桥接模式、外观模式和过滤器模式。

第6章,活动模式,演示如何将模式直接应用到应用程序中。这一章将介绍更多设计库功能,如可折叠工具栏、滚动和分隔符;创建由用户活动触发的自定义对话框;重新审视工厂模式并展示如何使用建造者模式填充UI。

第7章,混合模式,介绍并演示两种新的结构型模式——原型模式和装饰者模式,讲解它们的灵活性,还会使用这些模式来控制由不同复合按钮(例如开关、单选按钮组)组成的UI。

第8章,组合模式,专注于组合模式,介绍如何在多种情况下使用组合模式,以及如何做出正确的选择,然后在实际演示中使用它来填充嵌套的UI。接着介绍持久性数据的存储和检索、内部存储的使用、应用程序文件以及共享偏好形式的用户设置。

第9章,观察者模式,着眼于从一个活动向另一个活动转换的过程中所涉及的视觉过程,这不仅仅是装饰。我们将学习如何应用转换和共享元素来高效地利用移动设备的最小屏幕空间,并简化应用程序的使用和操作。

第10章,行为型模式,专注于主要的行为型模式——模板模式、策略模式、访问者模式和状态模式,提供每种模式的工作演示,并介绍它们的灵活性和用法。

第11章,可穿戴模式,展示Android Wear、电视(TV)和Auto的工作方式,演示如何依次设置和配置它们,并研究这些应用程序与标准手持设备应用程序之间的差异。

第12章,社交模式,演示如何添加Web功能和社交媒体。首先探索WebView以及如何使用它来创建内部Web应用程序;接下来探讨如何将应用程序连接到Facebook,以及我们可以用它做些什么;最后考察其他社交平台,如Twitter。

第13章,分发模式,介绍Android应用程序的部署、发布和盈利。我们将完成注册和发布过程,然后了解广告选项及其适用场景,最后学习如何通过一些部署技巧来使潜在用户数量最大化。

本书所需

Android Studio和SDK都是开源的,可以从一个包中安装。这便是本书所需的所有软件。但有一个小小的例外,相关章节会详述。

本书读者

本书面向具有基本Android开发经验的开发者。要充分利用本书,必须具备基本的Java编程知识。

排版约定

本书中有许多不同类型的文本样式。以下是这些样式的一些示例,并解释了其含义。

正文中的代码和用户输入如下所示:“将三个TextView添加到布局中,然后将代码添加到MainActivityonCreate()方法中。”

代码块样式如下所示:

Sequence prime = (Sequence) SequenceCache.getSequence("1");
primeText.setText(new StringBuilder()
        .append(getString(R.string.prime_text))
        .append(prime.getResult())
        .toString());

当我们希望引起你对代码块特定部分的注意时,相关行或项将以粗体显示:

@Override
public String getDescription() {
    return filling.getDescription() + " Double portion";
}

命令行输入和输出如下所示:

/gradlew clean:

新术语重要单词用黑体显示。你在屏幕上看到的单词(例如,在菜单或对话框中),在文本中会这样显示:“在手机上启用开发者选项。在某些型号的手机上,需要进入Settings | About phone(设置|关于手机)。”

 此图标表示警告或重要注释。

 此图标表示提示和诀窍。

读者反馈

我们始终欢迎读者反馈。请让我们了解你对本书的看法——你喜欢或不喜欢哪些内容。读者反馈对我们来说很重要,因为它有助于我们编写出可为读者提供最大帮助的内容。要向我们发送一般的反馈,请发送电子邮件至feedback@packtpub.com,并在邮件主题中注明书名。如果你是某个领域的专家并有兴趣编写图书,请访问www.packtpub.com/authors

读者支持

我们为读者提供各种服务,以帮助读者充分利用购买的图书。

下载示例代码

本书中文版的读者可访问https://www.ituring.com.cn/book/1965下载代码文件以及彩图。

勘误

虽然我们已尽力确保本书内容正确,但出错仍在所难免。如果你在我们的图书中发现错误,无论是文本还是代码错误,请告知我们,我们会非常感激。这样做可以减少其他读者的困扰,并帮助我们改进本书的后续版本。如果你发现任何错误,请访问http://www.packtpub.com/submit-errata,选择图书,单击Errata Submission Form链接,然后输入详细的错误信息。勘误一经核实,我们将接受你提交的表单,并将勘误上传到本公司网站或添加到现有勘误表中。1

1本书中文版的读者请到https://www.ituring.com.cn/book/1965提交勘误。——编者注

要查看以前提交的勘误,请访问https://www.packtpub.com/books/content/support,然后在搜索字段中输入书名。所需信息会在Errata区域显示出来。

反盗版

互联网上的盗版是所有媒体都要面临的问题。Packt非常重视保护版权和许可。如果你发现我们的作品在互联网上被非法复制,不管以什么形式,都请立即将地址或网站名称告知我们,以便我们采取补救措施。

请把可疑盗版材料的链接发送到copyright@packtpub.com

非常感谢你帮助我们保护作者,以及保护我们给读者带来有价值内容的能力。

问题

如果对本书的任何方面存有疑问,请通过questions@packtpub.com联系我们,我们将尽最大努力帮助你解决问题。

电子书

扫描如下二维码,即可购买本书中文版电子书。

{%}

目录

  • 版权声明
  • 译者序
  • 前言
  • 第 1 章 设计模式
  • 第 2 章 创建型模式
  • 第 3 章 Material模式
  • 第 4 章 布局模式
  • 第 5 章 结构型模式
  • 第 6 章 活动模式
  • 第 7 章 混合模式
  • 第 8 章 组合模式
  • 第 9 章 观察者模式
  • 第 10 章 行为型模式
  • 第 11 章 可穿戴模式
  • 第 12 章 社交模式
  • 第 13 章 分发模式
  • 作者简介