大家帮忙看看我的设计是否有问题
时间:2008-08-27 09:01:47
来源:论坛整理 作者: 编辑:chinaitzhe
1 0.9
268 5.1
46 0.17
4620 0.0
468 0.15
4631 0.15
4673 0.9
46732 1.1
Operator B:
1 0.92
44 0.5
46 0.2
467 1.0
48 1.2
给你一个号码4673212345,在 A中你就找到是1.1,在 B中就是1.0,然后你的程序给出的最低价格是1.0
为此我写了三个类,大家可以给我提提建议,哪里面向对象设计不好,或者没有遵守java规范。代码是可以运行的!
1.Operator.java
- Java code
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ import java.util.HashMap; import java.util.Map; public class Operator { private String name; private Map<Long, OperatorCallPrice> priceMap = new HashMap<Long, OperatorCallPrice>(); public String getName() { return name; } public void setName(String name) { this.name = name; } /** * 读取一个前缀的数据 * * @param prefix * @return */ public OperatorCallPrice getOperatorCallPrice(Long prefix) { return priceMap.get(prefix); } /** * 增加一个费用数据 * * @param prefix * @param price */ public OperatorCallPrice addOperatorCallPrice(Long prefix, Double price) { OperatorCallPrice operatorCallPrice = new OperatorCallPrice(); operatorCallPrice.setOperator(this); operatorCallPrice.setPrefix(prefix); operatorCallPrice.setPrice(price); priceMap.put(prefix, operatorCallPrice); return operatorCallPrice; } /** * 删除一个费用数据 * * @param prefix * @return */ public OperatorCallPrice removeOperatorCallPrice(Long prefix) { return priceMap.remove(prefix); } }
2. OperatorCallPrice.java
- Java code
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ public class OperatorCallPrice { private Operator operator; private Long prefix; private Double price; @Override public String toString() { return "Operator=" operator.getName() "\r\nPrefix=" getPrefix() "\r\nPrice=" getPrice(); } /** * * @return */ public Operator getOperator() { return operator; } /** * * @param operator */ public void setOperator(Operator operator) { this.operator = operator; } public Long getPrefix() { return prefix; } public void setPrefix(Long prefix) { this.prefix = prefix; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } }
3.OperatorManager.java 这个类可以运行的
- Java code
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ import java.util.HashMap; import java.util.Map; /** * 供应商manager类 * * * */ public class OperatorManager { // 供应商的名字对照 private Map<String, Operator> operatorMap = new HashMap<String, Operator>(); /** * 通过名字拿到供应商 * * @param name * @return */ public Operator getOperator(String name) { return operatorMap.get(name); } /** * 增加供应商 * * @param op */ public void addOperator(Operator operator) { operatorMap.put(operator.getName(), operator); } /** * 删除供应商 * * @param name * @return */ public Operator removeOperator(String name) { return operatorMap.remove(name); } /** * 搜索,进行遍历 * * @param phone * @return */ public OperatorCallPrice findByPhoneNumber(Long phone) { OperatorCallPrice operatorCallPrice = new OperatorCallPrice(); operatorCallPrice.setPrice(Double.MAX_VALUE); operatorCallPrice.setPrefix(phone); OperatorCallPrice tmp = null; long phonetemp; for (Operator o : operatorMap.values()) { phonetemp = phone; while (phonetemp > 0) { tmp = o.getOperatorCallPrice(phonetemp); if (tmp != null) { if (tmp.getPrice() < operatorCallPrice.getPrice()) { operatorCallPrice.setOperator(tmp.getOperator()); operatorCallPrice.setPrice(tmp.getPrice()); operatorCallPrice.setPrefix(tmp.getPrefix()); } break; } phonetemp /= 10; } } return operatorCallPrice; } /** * 添加不同类供应商和号码前缀、价格 * */ private void init() { Operator operator = new Operator(); operator.setName("Operator A"); operator.addOperatorCallPrice(1L, 0.9); operator.addOperatorCallPrice(268L, 5.1); operator.addOperatorCallPrice(46L, 0.17); operator.addOperatorCallPrice(4620L, 0.0); operator.addOperatorCallPrice(468L, 0.15); operator.addOperatorCallPrice(4631L, 0.15); operator.addOperatorCallPrice(4673L, 0.9); operator.addOperatorCallPrice(46732L, 1.1); this.addOperator(operator); operator = new Operator(); operator.setName("Operator B"); operator.addOperatorCallPrice(1L, 0.92); operator.addOperatorCallPrice(44L, 0.5); operator.addOperatorCallPrice(46L, 0.2); operator.addOperatorCallPrice(467L, 1.0); operator.addOperatorCallPrice(48L, 1.2); this.addOperator(operator); } /** * 输入测试号码 * * @param args */ public static void main(String[] args) { OperatorManager operatorManager = new OperatorManager(); operatorManager.init(); OperatorCallPrice operatorCallPrice = operatorManager.findByPhoneNumber(449812345L); System.out .println((operatorCallPrice == null || operatorCallPrice.getOperator() == null) ? "not found operator!" : operatorCallPrice); } }
网友回复:谢谢,很急,帮我看看有什么问题!面向对象设计 方面 还有任何有的问题!
网友回复:这也太长了吧,你自己不会试试吗,要是出错的话给你找些错误还行,
复制-->粘贴-->去瞧瞧,有答案的话给你说
网友回复:没有任何问题,而且代码 能跑! 就是设计上不知道 有什么不足
比如
网友回复:号码用long,不合适
第一长度有限,第二不能0开头
网友回复:没有从0开始的!我们不考虑这种情况!
网友回复:本来应该是建B 树
然后一个数字一个数字的匹配
现在看来没必要了,^_^
网友回复:楼上的,我的代码 面向对象方面没有问题吗?
有人说我的 operator和 operatorcallprice耦合性太强,
还有人说我的manager类 的逻辑 太复杂 就是那个findByPhoneNumber方法,复杂,不能复用!
网友回复:顶啊,路过的大佬!
网友回复:up
!
谢谢各位了!
网友回复:会的帮楼主答答啊!
网友回复:个人觉得
operatorcallprice
没多大必要
要是我会在operator里面加arraylist来保存价格
然后operator价格能的到相关号码price的函数
这样OperatorManager
就很简化了 容易理解
网友回复:map怎么办啊
网友回复:up!大牛们 人呢???
网友回复:
不知道你为什么要用map
我是没用过
我这些都直接用arraylist可控制大小.
查找也有相关的函数可以用operator直接返回价格
OperatorManager 就把所有的价格比下就完了
网友回复:map当然要用
数据多了,肯定不能用循环
网友回复:是的啊,正解!
关键字:问题,
下一篇:下面没有链接了











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面