Client.java:
package se; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Client { private static FlyweightFactory factory ; public static void main(String[] args) { List list1 = new ArrayList(); factory = new FlyweightFactory(); MonsterKind list = factory.newfactory("寒冰射手"); list.setMonsterKind("a",list1); list = factory.newfactory("德玛西亚"); list.setMonsterKind("a",list1); list = factory.newfactory("众星之子"); list.setMonsterKind("a",list1); list = factory.newfactory("生化魔人"); list.setMonsterKind("a",list1); list = factory.newfactory("生化魔人"); list.setMonsterKind("a",list1); list = factory.newfactory("战争之影"); list.setMonsterKind("b",list1); list = factory.newfactory("德玛西亚"); list.setMonsterKind("b",list1); list = factory.newfactory("生化魔人"); list.setMonsterKind("b",list1); System.out.println("a中含有英雄:"); List list2 = list.findMonsterKind("a",list1); Iterator it1 = list2.iterator(); while(it1.hasNext()) { System.out.println(" "+it1.next()); } System.out.println("b中含有英雄:"); List list3 = list.findMonsterKind("b",list1); Iterator it2 = list3.iterator(); while(it2.hasNext()) { System.out.println(" "+it2.next()); } System.out.println("英雄类型共有:"+factory.getNumber()+"种"); System.out.println("英雄总数共有:8种"); } } FlyweightFactory.java: package se; import java.util.HashMap; import java.util.Map; public class FlyweightFactory { private Map nameList = new HashMap(); private static FlyweightFactory factory = new FlyweightFactory(); public FlyweightFactory(){} public MonsterKind newfactory(String name) { if(nameList.containsKey(name)) { return (MonsterKind)nameList.get(name); } else{ MonsterKind id = new MonsterKind(name); nameList.put(name,id); return id; } } public int getNumber() { return nameList.size(); } } kind.java: package se; import java.util.List; public interface kind { public void setMonsterKind(String person , List list); public List findMonsterKind(String person, List list); } MonsterKind.java: package se; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class MonsterKind implements kind{ private String name ; public MonsterKind(String name){ //内蕴状态 this.name = name ; } public void setMonsterKind(String person , List list) { list.add(person); list.add(name); } public List findMonsterKind(String person, List list) { List nameList = new ArrayList(); Iterator it = list.iterator(); while(it.hasNext()) { if(person.equals((String)it.next())) nameList.add(it.next()); } return nameList ; } }