【面向对象设计基础】常量数据管理器

作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/

a)使用场景:在程序设计中,我们可以把所用要用到的常量设计为一个独立的类,使得对常量的管理有效清晰。

 

b)应用举例:

我们考虑一个顾客数据存储的应用场景,要用到三种类,Account, Address 和 CreditCard来代表用户数据信息。

image

image

image

 

我们设计了一个常量管理器对常量进行集中管理,UML如下:

image

public final class ConstantDataManager {
    public static final String ACCOUNT_DATA_FILE = "ACCOUNT.TXT";
    public static final int VALID_MIN_LNAME_LEN = 2;
    public static final String ADDRESS_DATA_FILE = "ADDRESS.TXT";
    public static final int VALID_ST_LEN = 2;
    public static final String VALID_ZIP_CHARS = "0123456789";
    public static final String DEFAULT_COUNTRY = "USA";
    public static final String CC_DATA_FILE = "CC.TXT";
    public static final String VALID_CC_CHARS = "0123456789";
    public static final String MASTER = "MASTER";
    public static final String VISA = "VISA";
    public static final String DISCOVER = "DISCOVER";

    private ConstantDataManager (){
       throw new AssertionError();
    }


}

定义这个黑体字的这个private构造函数意图在于,不让这个类实例化。而定义这个常量类时用到的final则说明这个类不要再被继承了。

 

c)注意:

不要把常量定义在interface中,虽然在interface中声明的字段在编译时都会自动加上static final,看着貌似很像常量的样子。之所以这么说是因为Java是动态语言,对一些字段的引用可以在运行时动态进行,我们有时利用这个特性只编译有改动的项目部分,而其余部分不变。但是常量有时候我们是需要调整的,比如,AGE_LIMIT可能就从16调整的18。这样只编译这个接口文件而不编译使用该接口的文件则可能会出现问题:

//file A.java
public interface A{
    int AGE_LIMIT = 16;
}
//file B.java
public class B{
    public static void main(String[] args){
        System.out.println("Age Limit is " + A.AGE_LIMIT);
    }
}编译A.java和B.java,运行B结果为Age Limit is 16,但是我们现在修改A.java 改为18,编译A,(不编译B),运行B,结果仍为Age Limit is 16。这就不是我们想看到的了,原因在于编译器已经将interface A中的AGE_LIMIT 内容编译进了class B中,而不是对interface A中的的引用。

同时这个也不符合interface应该专注于Service而不是Data这个设计宗旨。

 

作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
斯坦福大学经典教材网上有配套的公开课视频 内容简介   自1995年首次发布以来,Java编程语言作为一种教学语言变得日益重要,现在已经成为初级计算课程斯坦福大学的标准语言。Java语言可以让学生编写高度交互式程序,这充分激发了他们的学习兴趣。但Java语言很复杂,老师和学生们在理解Java语言的结构时,复杂性成为了最大的障碍。   在本书中,斯坦福大学教授、著名的计算机科学教育领导者Eric S.Roberts着重强调了更适合于初学者的友好讲解方式,使用ACM Java库简化编程。本书简练清晰地介绍了传统CS1课程的内容,同时也包含了最近的Computing Curriculum 2001报告计算机科学卷中指定为CS101O或CS111O课程的全部主题。 作者简介   Eric S. Roberts,美国斯坦福大学计算机科学系教授,并担任主管教学事务的系主任。同时还由于教学改革所取得的成就被评为Charles Simonyi荣誉教授。他于1980年获得哈佛大学应用数学博士学位,并曾在加州Palo Alto的DEC公司的系统研究中心工作了5年。作为一位成功的教育工作者,Roberts还获得了1993年的Bing Award奖。 目录   第1章 前言   1.1 计算简史   1.2 计算机科学的含义   1.3 计算机硬件简介   1.4 算法   1.5 编程过程的几个阶段   1.6 Java面向对象范例   1.7 Java和WWW   1.8 小结   1.9 复习题   第2章 编程示例   2.1 “Hello world”程序   2.2 编程过程的观点   2.3 两数相加的程序   2.4 编程习语和模式   2.5 类和对象   2.6 图形程序   2.7 小结   2.8 复习题   2.9 编程练习   第3章 表达式   3.1 原始数据类型   3.2 常量与变量   3.3 运算符和操作数   3.4 赋值语句   3.5 布尔表达式   3.6 设计改变   3.7 小结   3.8 复习题   3.9 编程练习   第4章 语句形式   4.1 Java的语句类型   4.2 控制语句和问题解决   4.3 if 语句   4.4 switch语句   4.5 while语句   4.6 for语句   4.7 小结   4.8 复习题   4.9 编程练习   第5章 方法   5.1 方法概述   5.2 编写自己的方法   5.3 方法调用过程的技巧   5.4 分解   5.5 算法方法   5.6 小结   5.7 复习题   5.8 编程练习   第6章 对象和类   6.1 使用RandomGenerator类   6.2 javadoc文档系统   6.3 定义自己的类   6.4 表示学生信息   6.5 有理数   6.6 扩展现有类   6.7 小结   6.8 复习题   6.9 编程练习   第7章 对象和内存   7.1 内存结构   7.2 将内存分配给变量   7.3 原始类型与对象   7.4 链接对象   7.5 小结   7.6 复习题   7.7 编程练习   第8章 字符串和字符   8.1 枚举的原则   8.2 字符   8.3 作为抽象概念的字符串   8.4 使用String类中的方法   8.5 字符串处理案例研究   8.6 小结   8.7 复习题   8.8 编程练习   第9章 面向对象图形   9.1 acm.graphics模型   9.2 acm.graphics程序包的结构   9.3 使用形状类   9.4 创建复合对象   9.5 小结   9.6 复习题   9.7 编程练习   第10章 事件驱动程序   10.1 Java事件模型   10.2 简单的事件驱动程序   10.3 响应鼠标事件   10.4 响应键盘事件   10.5 创建简单的GUI   10.6 Swing 交互器层次结构   10.7 管理组件布局   10.8 使用TableLayout类   10.9 小结   10.10 复习题   10.11 编程练习   第11章 数组与ArrayList类   11.1 数组简介   11.2 数组的内部表示法   11.3 数组作为参数传递   11.4 使用数组制作表格   11.5 数组初始化   11.6 多维数组   11.7 图像处理   11.8 ArrayList类   11.9 小结   11.10 复习题   11.11 编程练习   第12章 搜索与排序   12.1 搜索   12.2 排序   12.3 评估算法效率   12.4 使用数据文件   12.5 小结   12.6 复习题   12.7 编程练习   第13章 数组与ArrayList类   13.1 ArrayList类回顾   13.2 HashMap类   13.3 Java集合架构   13.4 面向对象设计的原则   13.5 小结   13.6 复习题   13.7 编程练习   第14章 展望   14.1 递归   14.2 并发   14.3 使用网络   14.4 编程模式   14.5 小结   14.6 复习题   14.7 编程练习

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值