设计模式——享元模式样例
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 ;
}
}