《Android游戏开发详解》——第2章,第2.14节隐藏变量

简介:

本节书摘来自异步社区《Android游戏开发详解》一书中的第2章,第2.14节隐藏变量,作者 【美】Jonathan S. Harbour,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.14 隐藏变量
Android游戏开发详解
注意,到目前位置,我们能够以两种不同的方式来修改Phone对象的状态。我们能够使用点运算符直接访问其变量,并且分配显式的值;还能够使用Phone对象提供的行为来间接地修改Phone对象的状态。

如果能够直接深入到myPhone对象,取出其信息并修改,我们说对象的变量是暴露的。从现在开始,我们将禁止暴露变量,基于很多原因,暴露变量可能会有问题。

例如,如果某人试图给一个变量分配一个非法的(或者不符合逻辑的)值,会怎么样呢?如下的代码对Java程序来说可能是可以接受的,但是,随后如果我们想要扩展这一程序的话,它可能会引发问题,并且这些值真的可能会影响到一些其他的功能。

myPhone.androidVersionNumber = -10;   // Version should be positive
myPhone.poweredOn = false;       // This is fine
myPhone.playingMusic = true;       // Shouldn’t play music while phone is off

暴露变量可能会引发问题,另一个原因在于,我们可能需要处理敏感信息。如果要运行一个本章开头所讨论的视频共享站点,我们可能不想让用户访问User对象的password变量,它应该总是隐藏起来的。在这里,安全性是一个问题。

我们想要隐藏变量的第三个原因,是为了可维护性和可扩展性。当我们随后有更加复杂的程序和游戏,它们带有众多不同类型的、彼此交互的对象,这时我们想要尽可能地减少依赖性(即那些严重依赖于特定交互的功能)。我们需要记住,程序和游戏可能会改变。你可能选择删除类并创建新的类,但是,你不想让这样的情况发生:即不得不重新编写整个应用程序来处理一处小小的修改。

例如,我们假设你有一个Enemy类,它与Player类和GameLevel类交互得很好。稍后,你决定要删除Enemy类,并且用一个SuperZombieOrangutan类来替代它。如果在Enemy、Player和GameLevel类之间有太多的依赖性,你可能需要重写这些类以处理新的敌人类型,你将要创建3个新的类而不是一个。这可能会变成一种恶意的模式。如果这需要花费很多的时间,你可能确定这一修改并不值得,这意味着你的游戏将会少一种僵尸怪兽。这绝不是好事情。

简而言之,你想要能够为游戏添加想要的功能,又不必担心修改已有的代码会成为可怕的梦魇。这意味着,我们想要让类尽可能地保持独立,而隐藏变量是朝着正确方向迈进的一步。我们将在后面的一章中更深入地讨论这一概念。

相关文章
|
Java Android开发 图形学
Android修行手册之Kotlin-【变量和常量】、【基础类型】、【字符串】篇
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
186 0
|
Android开发
【Android 组件化】使用 Gradle 实现组件化 ( Gradle 变量定义与使用 )(二)
【Android 组件化】使用 Gradle 实现组件化 ( Gradle 变量定义与使用 )(二)
135 0
|
Java Android开发 开发者
【Android 组件化】使用 Gradle 实现组件化 ( Gradle 变量定义与使用 )(一)
【Android 组件化】使用 Gradle 实现组件化 ( Gradle 变量定义与使用 )(一)
532 0
|
消息中间件 存储 Java
【Android 异步操作】手写 Handler ( Message 消息 | ThreadLocal 线程本地变量 | Looper 中的消息队列 MessageQueue )
【Android 异步操作】手写 Handler ( Message 消息 | ThreadLocal 线程本地变量 | Looper 中的消息队列 MessageQueue )
146 0