您的位置:首页 > 其它

面向对象设计题:“农场一头小母牛,每年生头小母牛。。。”的一种实现

2012-09-14 17:02 435 查看
最近在学习设计模式方面的知识,正好看到一道面向对象的设计题:“农场一头小母牛,每年生头小母牛,母牛五岁产母牛,二十年上多少牛?”马士兵大呼好诗啊!这道题的解答正好体现了java中面向对象的设计思想。以下是我的实现。

按照由名词划分类的基本原则,可以将诗中的小母牛和农场作为两个类。小母牛自身有年龄的属性,并能够长大和生小母牛。农场则具有总共有多少头小母牛的属性,并能够不停地增长数量。以下是小母牛(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,将这个问题不看成一个算法题,而看成一个面向对象的设计,思路清晰易懂且不容易出错。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐