为深入理解面向对象——大牛生小牛的问题

    最近在看老马的设计模式的视频,在对于面向对象的理解时。有个问题很能帮助我们理解面向对象,于是乎自己也照着网上的一些实例做了下。问题是这样的——农场有头大母牛,每年生头小母牛,小牛五年后生小母牛,问20年后农场一共有多少头牛?

 记得面向对象的思维方式是首先看有哪些对象,接着看每个对象都应该包含哪些属性,最后看每个对象应该有哪些方法以及各个对象之间的关系。

从题目就可知道这个问题中有两个对象,一个是牛,一个是农场。对于牛来说它肯定需要有一个年龄的属性,对于农场来说他应该包含了一个牛集合。至于方法,牛这边肯定有一个生小牛的方法和一个长大的方法。对于农场那边呢,我们需要一个添加方法(把新出生的小牛加到农场里),最后加一个统计方法(统计下农场上牛的数量)。废话不多说直接贴代码。

这个是牛的类

package com.model;

public class Cow {

	private int age;
	
	public Cow(){
		this.age=0;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
	/**
	 * 母牛生小牛方法
	 * @return
	 */
	public Cow bornCow(){
		if (age>=5) {
			return new Cow();
		}
		return null;
	}
	
	/**
	 * 牛长大的方法
	 */
	public void grouth(){
		age++;
	}
	
}

这个是农场的类

package com.model;

import java.util.ArrayList;
import java.util.List;

public class Farm {

	private int countNum;
	
	private List<Cow> cows = new ArrayList<>();;
	

	public int getCountNum() {
		return countNum;
	}

	public void setCountNum(int countNum) {
		this.countNum = countNum;
	}

	public List<Cow> getCows() {
		return cows;
	}

	public void setCows(List<Cow> cows) {
		this.cows = cows;
	}


	/**
	 * 增加牧场牛方法
	 * @param cow
	 */
	public void addCows(Cow cow){
		if (cow!=null) {
			cows.add(cow);
		}		
	}
	
	/**
	 * 统计牧场牛的数量
	 * @param duringYears
	 * @return
	 */
	public String getCowNum(int duringYears){
		for (int i = 1; i <= duringYears; i++) {
			System.out.println("第"+i+"年");
			for (int j = 0; j < cows.size(); j++) {
				Cow cow = cows.get(j);
				cow.grouth();
				addCows(cow.bornCow());
			}
			System.out.println("农场有"+cows.size()+"头牛!");
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return "经过"+duringYears+"年后,农场目前总共有"+cows.size()+"头牛!";
	}
}


这个是测试方法

package com.test;

import com.model.Cow;
import com.model.Farm;


public class Test {

	public static void main(String[] args) {
		Farm farm = new Farm();
		farm.addCows(new Cow());
		System.out.println(farm.getCowNum(20));
	}
}


以下是运行结果:

                        

 
九层之台,始于累土
用心      点滴      积累

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值