享元模式
1 这个名字有点奇怪,解释一下:一个对象池,使用者可以从对象池里面取出对象(元),取的过程中,如果对象池里面没有要的东西,则new一个添加进对象池(享)。
2 这里有两个重点,一个是对象的抽象部分由对象池提供,对象的具体部分由使用者另外定义。另一个是如果当前对象池没有要的对象,则添加进去。
public abstract class Hero
{
public Hero() { }
public abstract void Attack();
public int HP;
}
public class YaSuo : Hero
{
public YaSuo()
{
HP = 100;
}
public override void Attack()
{
}
}
public class HeroPool
{
public static Dictionary<string, Hero> heroTable = new Dictionary<string, Hero>();
public static Hero GetHero<T>(string heroName) where T :Hero ,new()
{
Hero hero = heroTable[heroName];
if(hero == null)
{
hero = new T();
heroTable.Add(heroName, hero);
}
return hero;
}
}
class Flyweight
{
public static void Play()
{
YaSuo yasuo1 = (YaSuo)HeroPool.GetHero<YaSuo>("YaSuo");
YaSuo yasuo2 = (YaSuo)HeroPool.GetHero<YaSuo>("YaSuo");
yasuo1.HP = 101;
yasuo2.HP = 102;
Zed zed1 = (Zed)HeroPool.GetHero<Zed>("Zed");
Zed zed2 = (Zed)HeroPool.GetHero<Zed>("Zed");
zed1.HP = 201;
zed2.HP = 202;
}
}