你可以看到这一点,对设计模式的其他伟大的文章NBSP。
{A1}允许您在应用程序中重用的内存空间,当你有大量的对象,几乎在本质上是一致的。例如,如果您正在编写一个智能手机的内存量是非常有限的的一个游戏,你需要显示,在外形上完全一样的许多外国人,可以只有一个地方保存,而不是外来的形状保持每个相同的形状,在珍贵的记忆。
{A2},有内在和外在状态的概念。内在各国的事情是不变的,并存储在内存中。外在的国家是不是恒定的,并在飞行需要计算的东西,因此不能存储在内存中。
例如,在游戏中,我们想创建,外星人的形状都是一样的,但它们的颜色会改变如何狂每个基础。外星人的形状,将内在的,外来的颜色,将外在的。
让我们来看看:FlyweightFactory类只是一个索引,可以检索的轻量级的对象,当给定的索引号,因为你可能有许多轻量级的对象,在您的application.nbsp;IFlyweight接口定义的轻量级的对象所需的方法和属性。 GetExtrinsicState方法得到的外在状态和intrinsicState变量持有内在states.nbsp;ConcreteFlyweight类是实际的轻量级的对象。 intrinsicState变量存储的信息是不变的,而GetExtrinsicState方法计算动态的外在状态。
应用:
{A6}AlienFactory类存储和检索不同类型的外国人使用其GetAlien SaveAlien methods.nbsp;
IAlien接口定义为国家的内在和外在状态的getColor方法的形状属性。LargeAlien和LittleAlien类是轻量级的对象,其中每个都有它自己的形状的内在状态和计算GetColor外在状态方法。
一个比较的{A2}和的是使用到创建的性质类似的(因此,一个创建模式)的新对象,而{A2的是使用,应用程序,以点相同的实例对象以节省内存(因此它的结构模式)
下面是实现代码,例如使用{A}的输出。注意内在状态存储在一个地方,只为了节省内存而外在国飞计算:public enum Color { Green, Red, Blue }
class Program
{
static void Main(string[] args)
{
//create Aliens and store in factory
AlienFactory factory = new AlienFactory();
factory.SaveAlien(0, new LargeAlien());
factory.SaveAlien(1, new LittleAlien());
//now access the flyweight objects
IAlien a = factory.GetAlien(0);
IAlien b = factory.GetAlien(1);
//show intrinsic states, all accessed in memory without calculations
Console.WriteLine("Showing intrinsic states...");
Console.WriteLine("Alien of type 0 is " + a.Shape);
Console.WriteLine("Alien of type 1 is " + b.Shape);
//show extrinsic states, need calculations
Console.WriteLine("Showing extrinsic states...");
Console.WriteLine("Alien of type 0 is " + a.GetColor(0).ToString());
Console.WriteLine("Alien of type 0 is " + a.GetColor(1).ToString());
Console.WriteLine("Alien of type 1 is " + b.GetColor(0).ToString());
Console.WriteLine("Alien of type 1 is " + b.GetColor(1).ToString());
}
}
public interface IAlien
{
string Shape { get; } //intrinsic state
Color GetColor(int madLevel); //extrinsic state
}
public class LargeAlien : IAlien
{
private string shape = "Large Shape"; //intrinsic state
string IAlien.Shape
{
get { return shape; }
}
Color IAlien.GetColor(int madLevel) //extrinsic state
{
if (madLevel == 0)
return Color.Green;
else if (madLevel == 1)
return Color.Red;
else
return Color.Blue;
}
}
public class LittleAlien : IAlien
{
private string shape = "Little Shape"; //intrinsic state
string IAlien.Shape
{
get { return shape; }
}
Color IAlien.GetColor(int madLevel) //extrinsic state
{
if (madLevel == 0)
return Color.Red;
else if (madLevel == 1)
return Color.Blue;
else
return Color.Green;
}
}
public class AlienFactory
{
private Dictionary<int,> list = new Dictionary<int,>();
public void SaveAlien(int index, IAlien alien)
{
list.Add(index, alien);
}
public IAlien GetAlien(int index)
{
return list[index];
}
}</int,></int,>
{A9}
喜欢这篇文章吗?你可以看到这和其他设计模式{A10}的大文章。