设计题目:农夫果园
一个农场,专门种植销售各类水果,在这个系统中需要描述下列水果:
葡萄:Grape
草莓:Strawberry
苹果:Apple
水果与其他的植物有很大的不同,水果最终是可以采摘食用的。那么一个自然的做法就是建立一个各种水果都适用的接口
,以便与农场里的其他植物区分开。水果接口规定出所有的水果都必须实现的接口,包括任何水果必须具备的方法:种植
plant(),生长grow(),收获harvest()。
Apple类是水果中的一种,因此它实现了水果接口所声明的所有方法。另外,由于苹果是多年生植物,因此多出一个
treeAge性质,描述苹果树的树龄。
Grape类是水果类的一种,也实现Fruit接口中所声明的所有方法。但由于葡萄分为有籽和无籽的两种,因此比通常的水果
多出一个seedless性质。
Strawberry类也是水果的一种,也实现了Fruit接口。
农场的园丁也是系统的一部分,自然要由一个合适的类来代表。这个类就是FruitGardener,它会根据农场老板的要求,
使用factory()方法创建出不同的水果对象,比如苹果(Apple),葡萄(Grape)或草莓(Strawberry)的实例。而如
果接到不合法的要求,会提示错误。
农场的市场调查员也是系统的一部分,也需要一个类代表,这个类是MarketInquirer,它通过inquire()调查今年市场
上哪一种水果热销。
农场的老板也是系统的一部分,仍需要一个类来代表,这个类是FruitBoss,他会根据市场调查员的反馈信息,通知农场
的园丁今年种植哪种水果。
我要代码,不要口水!谢谢!
interface Fruit
{
void grow();
void harvest();
void plant();
}
class Apple implements Fruit
{
private int treeAge;
public void grow() { }
public void harvest() { }
public void plant() { }
public int getTreeAge() { return treeAge; }
public void setTreeAge(int treeAge) { this.treeAge = treeAge; }
}
class Grape implements Fruit
{
private boolean seedless;
public void grow() { }
public void harvest() { }
public void plant() { }
public boolean getSeedless() { return seedless; }
public void setSeedless(boolean seedless) { this.seedless = seedless; }
}
class Strawberry implements Fruit
{
private boolean coteless;
public void grow() { }
public void harvest() { }
public void plant() { }
public boolean getCoteless() { return coteless; }
public void setCoteless(boolean coteless) { this. coteless = coteless; }
}
class FruitGardener
{
public static Fruit factory(String which) throws Exception
{
if (which.equalsIgnoreCase("apple")) { return new Apple(); }
else if (which.equalsIgnoreCase("strawberry")) { return new Strawberry(); }
else if (which.equalsIgnoreCase("grape")) { return new Grape(); }
else { throw new Exception("Bad fruit request"); }
}
}
//
public interface Fruit{
void plant();
void grow();
void harvest();
int getNumber();
}
//
class Apple implements Fruit
{
public Apple(){}
public Apple(int num){
number = num;
}
public void plant(){
System.out.println("苹果已种植!");
}
public void grow(){
System.out.println("苹果正在成长!");
}
public void harvest(){
System.out.println("苹果已经收获!");
}
public void setTreeAge(int treeAge){
this.treeAge = treeAge;
}
public int getTreeAge(){
return treeAge;
}
public void setNumber(int num){
number = num;
}
public int getNumber(){
return number;
}
private int treeAge;
private int number;
}
//
class Grape implements Fruit
{
public Grape(){}
public Grape(int num){
number = num;
if(num%2==0)
setSeedLess(true);
else
setSeedLess(false);
}
public void plant(){
System.out.println((isSeedLess()?"有子":"无子")+"葡萄种了"+number);
}
public void grow(){
System.out.println("葡萄正在成长!");
}
public void harvest(){
System.out.println("葡萄已经收获!");
}
public void setSeedLess(boolean seedLess){
this.seedLess = seedLess;
}
public boolean isSeedLess(){
return seedLess;
}
public void setNumber(int num){
number = num;
}
public int getNumber(){
return number;
}
private boolean seedLess;
private int number;
}
//
class Strawberry implements Fruit
{
public Strawberry(){}
public Strawberry(int num){
number = num;
}
public void plant(){
System.out.println("草莓已种植!");
}
public void grow(){
System.out.println("草莓正在成长!");
}
public void harvest(){
System.out.println("草莓已经收获!");
}
public void setNumber(int num){
number = num;
}
public int getNumber(){
return number;
}
private int number;
}
//
class FruitGardener{
private static Fruit getFruitFactoryInstance(String fruit,int num){
if(fruit.equalsIgnoreCase("apple"))
return new Apple(num);
else if(fruit.equalsIgnoreCase("grape"))
return new Grape(num);
else if(fruit.equalsIgnoreCase("strawberry"))
return new Strawberry(num);
else
return null;
}
public static void fruitFactory(String fruit,int num){
Fruit fruits = getFruitFactoryInstance(fruit,num);
fruits.plant();
fruits.grow();
fruits.harvest();
}
}
//
class MarketInquirer{
public String inquire(){
int appleNum = (int)(java.lang.Math.random()*1000);
int grapeNum = (int)(java.lang.Math.random()*1000);
int strawberryNum = (int)(java.lang.Math.random()*1000);
max=max(appleNum,grapeNum,strawberryNum);
if(max==appleNum){
System.out.println("市场调查员:今年苹果最热销!");
return "Apple";
}
else if(max==grapeNum){
System.out.println("市场调查员:今年"+(max%2==0?"有子":"无子")+"葡萄最热销!");
return "Grape";
} else {
System.out.println("市场调查员:今年草莓最热销!");
return "Strawberry";
}
}
private int max(int x,int y,int z){
int max;
if(y>x)
max=y;
else if(z>x)
max=z;
else
max=x;
return max;
}
public int max;
}
//
class FruitBoss
{
public static void main(String[] args)
{
MarketInquirer mi = new MarketInquirer();
String fruit = mi.inquire();
FruitGardener.fruitFactory(fruit,mi.max);
}
}