一道面试题的分析(续)

原创 2006年06月21日 21:16:00

前面的讨论中留下了一个问题,还没有分析完。就是表示“币种”的数据类型。因此继续讨论的话就要超出了面试题目的范围,所以另开一文。

如果对币种信息的要求只是为了区别不同Money对象所代表的货币种类,以保证只有相同币种的Money对象才能进行计算,那么无论是String, int还是enum都够了。但是,在一个稍大一点的项目中,要求可能都不会仅限于此。比如需要在显示金额的时候能显示正确的货币符号,或者一些系统中还需要显示3位的币种代码,比如用USD表示美元,RMB表示人民币。在有用户输入或者和其它系统交互的情况下,还会需要判断输入的数据是否是合法的,系统支持的币种。有这些需求的情况下,自然的,我们需要一个单独的类Currency。至于在Currency内部使用具体什么类型,参见前一篇中的讨论。

因此,Money类应该是这个样子的:

public class Money {
    private Currency currency;
    private BigDecimal amount;
   
    public Money (Currency aCurrency, BigDecimal aAmount) {
        ...
    }
   
    public Money add (Money aMoney)
    throws IncompatibleCurrencyException {
        ...
    }
   
    public Money subtract (Money aMoney)
    throws IncompatibleCurrencyException {
        ...
    }
}

如果系统中需要由用户来维护系统所能支持的币种,那么一般需要在数据库中维护一张表,此时Currency就是一个可持久化类了。

关于这个设计问题,还请参看我前面翻译的那篇“Prefactoring”的2.6节。虽然那篇文章主要讨论的是分析和领域建模阶段,但是很多讨论对于设计阶段仍然是有效的。

 

对一道面试题的总结与扩展思考(关于一笔画问题的数学分析)

摘要 前几天参加了一个公司的面试,其中被问到了一个题。面试官在纸上画了一个图形(具体图形见下文),问我能不能一笔画出这个图形,要求每条边必须只走一次,并且画的过程中笔不能离开纸。当时我没有试着去...

一道阿里多线程面试题的分析与应对

引言: 通过一道阿里的Java多线程面试题目分析,来深入理解Java线程的状态转变过程。...

对一道面试题的总结与扩展思考(关于一笔画问题的数学分析)

转自:http://www.cnblogs.com/leoo2sk/archive/2010/10/18/1854658.html 摘要 前几天参加了一个公司的面试,其中被问到了一个题...

对一道面试题的总结与扩展思考(关于一笔画问题的数学分析)(转载)

摘要 前几天参加了一个公司的面试,其中被问到了一个题。面试官在纸上画了一个图形(具体图形见下文),问我能不能一笔画出这个图形,要求每条边必须只走一次,并且画的过程中笔不能离开纸。当时我没有试着去画 ...

一道面试题的分析

   在 万仓一黍 的博客中看到了“一道有趣的面试题 ”这篇文章,文中给出了一种解法,仔细想了一下,发现也可以在常数时间复杂度下解决。题目:        某幢大楼有100层。你手里有两颗一模一样的玻...

对一道面试题的总结与扩展思考(关于一笔画问题的数学分析)

摘要 前几天参加了一个公司的面试,其中被问到了一个题。面试官在纸上画了一个图形(具体图形见下文),问我能不能一笔画出这个图形,要求每条边必须只走一次,并且画的过程中笔不能离开纸。当时我没有试着去...

一道亚马逊算法面试题的情景分析

阅读博客的朋友可以观看视频: http://study.163.com/course/courseMain.htm?courseId=1002942008我们聚焦于一道亚马逊的算法面试题,通过分析该...

一道asp.net c#面试题

  • 2009年04月26日 21:08
  • 31KB
  • 下载

一道真正的数据库sql面试题

  • 2010年05月16日 15:53
  • 3KB
  • 下载

白话经典算法系列之十 一道有趣的GOOGLE面试题

微博http://weibo.com/MoreWindows已开通,欢迎关注。最近在微博上看到一道有趣的GOOGLE面试题,见下图:文字版:一个大小为n的数组,里面的数都属于范围[0, n-1],有不...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一道面试题的分析(续)
举报原因:
原因补充:

(最多只允许输入30个字)