diff --git a/src/Main.java b/src/Main.java index 671bb51..70316b8 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,9 +1,20 @@ +import java.util.Vector; +import buy.*; +import livestock.*; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub + //示例买5头猪 + Vector fivePigs=new BuyPig().start(5); + for(int i=0;i<5;i++) + { + System.out.print(fivePigs.get(i).getId()); + } + //示例买5个种子 + new BuySeedOrFeed().addToList(0, 6); } } diff --git a/src/buy/BuyLivestock.java b/src/buy/BuyLivestock.java index f587ea5..6de2f1b 100644 --- a/src/buy/BuyLivestock.java +++ b/src/buy/BuyLivestock.java @@ -4,7 +4,7 @@ public abstract class BuyLivestock extends Buy{ ResList reslist = ResList.Instance(); - public Vector llist = null; + public Vector llist = new Vector(); public void addToList(int type, int num){//添加新增牲畜至列表 reslist.l_list.get(type).addAll(llist); diff --git a/src/buy/BuySeed.java b/src/buy/BuySeedOrFeed.java similarity index 67% rename from src/buy/BuySeed.java rename to src/buy/BuySeedOrFeed.java index a2b478d..e53538a 100644 --- a/src/buy/BuySeed.java +++ b/src/buy/BuySeedOrFeed.java @@ -1,10 +1,9 @@ package buy; -public class BuySeed extends Buy { +public class BuySeedOrFeed extends Buy { @Override public void addToList(int type, int num) { - // TODO Auto-generated method stub ResList reslist = ResList.Instance(); reslist.s_list[type] += num; } diff --git a/src/buy/BuySheep.java b/src/buy/BuySheep.java new file mode 100644 index 0000000..608e330 --- /dev/null +++ b/src/buy/BuySheep.java @@ -0,0 +1,28 @@ +package buy; +import livestock.*; +import java.util.Vector; + +import buy.ResList.l_type; + +public class BuySheep extends BuyLivestock{ + private int type = l_type.sheep.id();//指明该类type对应的枚举量 + + @Override + public Livestock create(int id) { + Livestock sheep = new Sheep(id); + return sheep; + } + + @Override + public Vector start(int num){ + // + int id1 = reslist.l_list.get(type).size(); + for(int i = 0; i < num; i++){ + llist.addElement(create(id1)); + id1++; + } + addToList(type, num); + return llist; + } + +} \ No newline at end of file diff --git a/src/buy/ResList.java b/src/buy/ResList.java index 10e56df..cf1d831 100644 --- a/src/buy/ResList.java +++ b/src/buy/ResList.java @@ -14,7 +14,7 @@ public int id(){ } };//牲畜类型 public enum s_type{ - CabbageSeed(0),CarrotSeed(1),AppleSeed(2),PearSeed(3); + CabbageSeed(0),CarrotSeed(1),AppleSeed(2),PearSeed(3),feed(4); private int type; private s_type(int i){ this.type = i; @@ -22,13 +22,18 @@ private s_type(int i){ public int id(){ return type; } - };//种子或幼苗类型 + };//种子幼苗类型或饲料 public Vector> l_list = new Vector>(10);//存储不同牲畜个体 - public int[] s_list = new int[10];//存储不同种子或幼苗数量 + public int[] s_list = new int[10];//存储不同种子幼苗或饲料数量 public int money; private final static ResList r = new ResList();//Singleton 单例模式 - private ResList(){}; + private ResList(){ + for(int i = 0; i < 6; i++){ + Vector l = new Vector(); + l_list.addElement(l); + } + }; public static ResList Instance(){ return r; } diff --git a/src/livestock/Chook.java b/src/livestock/Chook.java index 25c2165..67049c2 100644 --- a/src/livestock/Chook.java +++ b/src/livestock/Chook.java @@ -4,8 +4,9 @@ import thing.Carrier; import thing.Product; import thing.ProductType; - +//继承Livestock类 public class Chook extends Livestock{ + //构造函数 public Chook (int id) { super(id,species.chook,species.chook.getPrice()); @@ -16,16 +17,20 @@ public void getProduct() { newCarrier.carryToWareHouse(); } + //收鸡蛋 public boolean getEgg() { + //鸡已下蛋 if(nowstate.getState()==1) { System.out.println("获得鸡蛋"); //获得鸡蛋 + //重置鸡的状态 nowstate.setFeedTime(); nowstate.setDrinkTime(); return true; } + //鸡未下蛋 else { System.out.println("没有鸡蛋"); return false; diff --git a/src/livestock/Cow.java b/src/livestock/Cow.java index e851f5e..0581834 100644 --- a/src/livestock/Cow.java +++ b/src/livestock/Cow.java @@ -17,7 +17,7 @@ public void getProduct() { Carrier newCarrier=new Carrier(new Product(ProductType.MILK,9)); newCarrier.carryToWareHouse(); } - + //挤奶 public boolean getMilk() { if(nowstate.getState() == 1 ) diff --git a/src/livestock/Livestock.java b/src/livestock/Livestock.java index fa24b31..a330c65 100644 --- a/src/livestock/Livestock.java +++ b/src/livestock/Livestock.java @@ -5,6 +5,7 @@ public abstract class Livestock { protected LivestockState nowstate; private int id; + //种类枚举,包含价格 public enum species{ ox(1000),sheep(500),chook(5),cow(20),pig(300); private float price; @@ -15,11 +16,13 @@ float getPrice() { return price; } }; - + //枚举变量 private species spe; - private int lingDays; - private float weight; + + //private int lingDays; + //private float weight; //private int place; + //构造函数 public Livestock(int id,species s,float price) { this.id=id; @@ -38,10 +41,10 @@ public int getId() { return weight; }*/ - public int getLingDays() + /*public int getLingDays() { return lingDays; - } + }*/ } diff --git a/src/livestock/Ox.java b/src/livestock/Ox.java index db7b328..69e3afa 100644 --- a/src/livestock/Ox.java +++ b/src/livestock/Ox.java @@ -18,6 +18,7 @@ public void getProduct() { newCarrier.carryToWareHouse(); } + //屠宰 public boolean slaughter() { if(nowstate.getState() == 1 ) diff --git a/src/prototype_visitor/acceptor.java b/src/prototype_visitor/acceptor.java new file mode 100644 index 0000000..46f7d3b --- /dev/null +++ b/src/prototype_visitor/acceptor.java @@ -0,0 +1,5 @@ +package prototype_visitor; + +public interface acceptor { +public abstract void accept(visitor v); +} diff --git a/src/prototype_visitor/listvisitor.java b/src/prototype_visitor/listvisitor.java new file mode 100644 index 0000000..3051368 --- /dev/null +++ b/src/prototype_visitor/listvisitor.java @@ -0,0 +1,17 @@ +package prototype_visitor; +import java.util.Iterator; +public class listvisitor extends visitor { + + @Override + public void visit(wstate state) { + // TODO Auto-generated method stub + System.out.println(state.getName()); + Iterator it=state.iterator(); + while(it.hasNext()) + { + wstate s=(wstate)it.next(); + System.out.println(s.getName()); + } + } + +} diff --git a/src/prototype_visitor/rainy.java b/src/prototype_visitor/rainy.java new file mode 100644 index 0000000..3781c61 --- /dev/null +++ b/src/prototype_visitor/rainy.java @@ -0,0 +1,55 @@ +package prototype_visitor; + +public class rainy extends wstate{ + private int _id; + private static int _count=1; + private static rainy _freestate; + public rainy() {addPrototype(this);wstate.array.add(this);}; + + protected rainy(int i) { + // TODO Auto-generated constructor stub + _id=_count++; + } + + @Override + protected weather returnType() { + // TODO Auto-generated method stub + return weather.rainy; + } + + //protected void finalize() {_count--;}; + + @Override + public wstate copy() { + // TODO Auto-generated method stub + rainy s=new rainy(1); + wstate.array.add(s); + return s; + } + + @Override + public void work() { + // TODO Auto-generated method stub + System.out.println("Weather::rainy"+_id); + } + + @Override + public void accept(visitor v) { + // TODO Auto-generated method stub + v.visit(this); + } + + @Override + public String getName() { + // TODO Auto-generated method stub + String name="Weather::rainy"+_id; + return name; + } + + @Override + public int getNumber() { + // TODO Auto-generated method stub + return _count; + } + +} diff --git a/src/prototype_visitor/run.java b/src/prototype_visitor/run.java new file mode 100644 index 0000000..a3fb0b1 --- /dev/null +++ b/src/prototype_visitor/run.java @@ -0,0 +1,25 @@ +package prototype_visitor; + +import java.util.ArrayList; +public class run { +public static void main(String[]args) +{ + ArrayListinput=new ArrayList(); + input.add(weather.sunny); + input.add(weather.rainy); + input.add(weather.windy); + input.add(weather.sunny); + input.add(weather.rainy); + input.add(weather.windy); + input.add(weather.windy); + input.add(weather.sunny); + input.add(weather.rainy); + int num_states=input.size(); + wstate[]state=new wstate[num_states]; + for(int i=0;iarray=new Vector(); + protected abstract weather returnType(); + protected static void addPrototype(wstate state) + { + _states[_nextslot++]=state; + } + protected abstract wstate copy(); + public static wstate findandclone(weather s) + { + for(int i=0;i<_nextslot;i++) + if(_states[i].returnType()==s) + return _states[i].copy(); + if(s==weather.sunny) + return new sunny(); + else if(s==weather.rainy) + return new rainy(); + else + return new windy(); + } + public abstract void work(); + public abstract String getName();//取得名称 + public abstract int getNumber();//取得数量 + public void accept(visitor v) + { + v.visit(this); + } + public Iterator iterator() + { + return array.iterator(); + } +} diff --git a/src/thing/LivestockState.java b/src/thing/LivestockState.java index 4e2eac2..c19593a 100644 --- a/src/thing/LivestockState.java +++ b/src/thing/LivestockState.java @@ -1,7 +1,7 @@ package thing; import livestock.Livestock; - +import buy.ReList; public class LivestockState { private int DrinkTime=0; @@ -41,6 +41,7 @@ public void Drink() { } //喂食 public void Feed() { + ReList.Instance().s_list[ReList.Instance().s_type.feed.id()]--; this.FeedTime++; if(this.getState()==0&&this.DrinkTime>=3&&this.FeedTime>=3) {