1. 程式人生 > >為深入理解面向物件——大牛生小牛的問題

為深入理解面向物件——大牛生小牛的問題

    最近在看老馬的設計模式的視訊,在對於面向物件的理解時。有個問題很能幫助我們理解面向物件,於是乎自己也照著網上的一些例項做了下。問題是這樣的——農場有頭大母牛,每年生頭小母牛,小牛五年後生小母牛,問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));
	}
}


以下是執行結果:

九層之臺,始於累土 用心      點滴      積累