面向对象设计题:“农场一头小母牛,每年生头小母牛。。。”的一种实现
2012-09-14 17:02
435 查看
最近在学习设计模式方面的知识,正好看到一道面向对象的设计题:“农场一头小母牛,每年生头小母牛,母牛五岁产母牛,二十年上多少牛?”马士兵大呼好诗啊!这道题的解答正好体现了java中面向对象的设计思想。以下是我的实现。
按照由名词划分类的基本原则,可以将诗中的小母牛和农场作为两个类。小母牛自身有年龄的属性,并能够长大和生小母牛。农场则具有总共有多少头小母牛的属性,并能够不停地增长数量。以下是小母牛(LittleCow)类的代码:
接着是农场(Farm)类的代码:
最后进行测试:
得到的结果为小母牛总数为71,将这个问题不看成一个算法题,而看成一个面向对象的设计,思路清晰易懂且不容易出错。
按照由名词划分类的基本原则,可以将诗中的小母牛和农场作为两个类。小母牛自身有年龄的属性,并能够长大和生小母牛。农场则具有总共有多少头小母牛的属性,并能够不停地增长数量。以下是小母牛(LittleCow)类的代码:
public class LittleCow { private int age = 0; // 小母牛的年龄 /** * 公共的构造函数 * @param age */ public LittleCow(int age) { this.age = age; } /** * 为变量提供getters和setters * @return */ public int getAge() { return age; } public void setAge(int age) { this.age = age; } /** * 小母牛每年长一岁,当大于5岁时每年还会生下一头小母牛 * @param f 农场对象 */ public void growUp(Farm f) { age++; if(age > 5) { f.add(new LittleCow(0)); System.out.println("age is:" + age); } } }
接着是农场(Farm)类的代码:
import java.util.ArrayList; public class Farm { private int count = 1; // 农场中小母牛的数量 private ArrayList<LittleCow> littleCows = null; // 小母牛的集合 /** * 为两个私有实例变量设置getters和setters * @return */ public int getCount() { return littleCows.size(); } public void setCount(int count) { this.count = count; } public ArrayList<LittleCow> getLittleCows() { return littleCows; } public void setLittleCows(ArrayList<LittleCow> littleCows) { this.littleCows = littleCows; } /** * 添加小母牛到集合中 * @param littleCow 小母牛对象 */ public void add(LittleCow littleCow) { littleCows.add(littleCow); } /** * 在所规定的年数内农场小母牛的增长情况 * @param time 所设定的年数 */ public void increase(int time) { for(int i=0; i<time; i++) { int j = getCount(); for(int k=0; k<j; k++) { LittleCow lc = littleCows.get(k); lc.growUp(this); } } } }
最后进行测试:
import java.util.ArrayList; public class Test { private static int count = 0; public static void main(String[] args) { // TODO Auto-generated method stub Farm f = new Farm(); ArrayList<LittleCow> cows = new ArrayList<LittleCow>(); cows.add(new LittleCow(0)); // 添加原有的第一头小母牛 f.setLittleCows(cows); f.increase(20); // 设置年数为20 count = f.getCount(); System.out.println("the total number is:" + count); } }
得到的结果为小母牛总数为71,将这个问题不看成一个算法题,而看成一个面向对象的设计,思路清晰易懂且不容易出错。
相关文章推荐
- 农场一头小母牛,每年生头小母牛,母牛5岁产母牛,20年上多少牛?--java面向对象方式实现
- 程序设计题:农场一头小母牛_每年生头小母牛_面对象!
- (Java实现) HDOJ 2023 求平均成绩 面向对象设计思想
- 一种用于ABAP Report重构的面向对象设计方法——MVC
- 面向对象的设计与实现的一些基础但重要的概念
- 面向对象设计原则六 - 针对接口编程,而不是针对实现编程
- C语言的设计模式-面向对象机制的实现
- 【设计模式】面向对象作业-超级母牛的故事
- 软件体系结构上机实验 面向对象体系结构风格的 KWIC 关键词索引系统设计与实现 java
- JS面向对象应用二(多差异流程的WEB客户端逻辑设计实现)
- 面向对象整体GIS数据模型的设计与实现
- 面向对象分析、设计、实现
- 有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n
- 利用prototype属性自定义对象,实现对象继承等面向对象设计
- 面向对象设计原则六 - 针对接口编程,而不是针对实现编程
- 一种面向电信行业基站数据的数据采集系统的设计与实现
- 一个农场有头母牛,现在母牛才一岁,要到四岁才能生小牛,四岁之后,每年生一头小牛,n年后有多少头小牛
- 有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
- 设计模式必须通过面向对象来实现吗?
- C语言的设计模式-面向对象机制的实现(一)