Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓƵ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
.NETÉè¼Æģʽ£¨13£©£ºÏíԪģʽ£¨Flyweight Pattern£©
 
×÷Õß Àî»á¾ü£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-09-24
  2518  次浏览      19
 

ÕªÒª£ºÃæÏò¶ÔÏóµÄ˼ÏëºÜºÃµØ½â¾öÁ˳éÏóÐÔµÄÎÊÌ⣬һ°ãÒ²²»»á³öÏÖÐÔÄÜÉϵÄÎÊÌâ¡£µ«ÊÇÔÚijЩÇé¿öÏ£¬¶ÔÏóµÄÊýÁ¿¿ÉÄÜ»áÌ«¶à£¬´Ó¶øµ¼ÖÂÁËÔËÐÐʱµÄ´ú¼Û¡£ÄÇôÎÒÃÇÈçºÎÈ¥±ÜÃâ´óÁ¿Ï¸Á£¶ÈµÄ¶ÔÏó£¬Í¬Ê±ÓÖ²»Ó°Ïì¿Í»§³ÌÐòʹÓÃÃæÏò¶ÔÏóµÄ·½Ê½½øÐвÙ×÷£¿

±¾ÎÄÊÔͼͨ¹ýÒ»¸ö¼òµ¥µÄ×Ö·û´¦ÀíµÄÀý×Ó£¬ÔËÓÃÖع¹µÄÊֶΣ¬Ò»²½²½´øÄã×ß½øFlyweightģʽ£¬ÔÚÕâ¸ö¹ý³ÌÖÐÎÒÃÇһͬ˼¿¼¡¢Ì½Ë÷¡¢È¨ºâ£¬Í¨¹ý±È½Ï¶øµÃ³öºÃµÄʵÏÖ·½Ê½£¬¶ø²»ÊǸøÄã×îÖÕµÄÒ»¸öÍêÃÀ½â¾ö·½°¸¡£

¸ÅÊö

ÃæÏò¶ÔÏóµÄ˼ÏëºÜºÃµØ½â¾öÁ˳éÏóÐÔµÄÎÊÌ⣬һ°ãÒ²²»»á³öÏÖÐÔÄÜÉϵÄÎÊÌâ¡£µ«ÊÇÔÚijЩÇé¿öÏ£¬¶ÔÏóµÄÊýÁ¿¿ÉÄÜ»áÌ«¶à£¬´Ó¶øµ¼ÖÂÁËÔËÐÐʱµÄ´ú¼Û¡£ÄÇôÎÒÃÇÈçºÎÈ¥±ÜÃâ´óÁ¿Ï¸Á£¶ÈµÄ¶ÔÏó£¬Í¬Ê±ÓÖ²»Ó°Ïì¿Í»§³ÌÐòʹÓÃÃæÏò¶ÔÏóµÄ·½Ê½½øÐвÙ×÷£¿

Òâͼ

ÔËÓù²Ïí¼¼ÊõÓÐЧµØÖ§³Ö´óÁ¿Ï¸Á£¶ÈµÄ¶ÔÏó¡£[GOF ¡¶Éè¼Æģʽ¡·]

½á¹¹Í¼

ͼ1 Flyweightģʽ½á¹¹Í¼

Éú»îÖеÄÀý×Ó

ÏíԪģʽʹÓù²Ïí¼¼ÊõÓÐЧµØÖ§³Ö´óÁ¿Ï¸Á£¶ÈµÄ¶ÔÏó¡£¹«¹²½»»»µç»°Íø£¨PSTN£©ÊÇÏíÔªµÄÒ»¸öÀý×Ó¡£ÓÐһЩ×ÊÔ´ÀýÈ粦ºÅÒô·¢ÉúÆ÷¡¢ÕñÁå·¢ÉúÆ÷ºÍ²¦ºÅ½ÓÊÕÆ÷ÊDZØÐëÓÉËùÓÐÓû§¹²ÏíµÄ¡£µ±Ò»¸öÓû§ÄÃÆðÌýͲ´òµç»°Ê±£¬Ëû²»ÐèÒªÖªµÀʹÓÃÁ˶àÉÙ×ÊÔ´¡£¶ÔÓÚÓû§¶øÑÔËùÓеÄÊÂÇé¾ÍÊÇÓв¦ºÅÒô£¬²¦´òºÅÂ룬²¦Í¨µç»°¡£

ͼ2 ʹÓò¦ºÅÒô·¢ÉúÆ÷Àý×ÓµÄÏíԪģʽ¶ÔÏóͼ

Flyweightģʽ½â˵

FlyweightÔÚÈ­»÷±ÈÈüÖÐÖ¸×îÇáÁ¿¼¶£¬¼´¡°Ó¬Á¿¼¶¡±£¬ÕâÀï·­ÒëΪ¡°ÏíÔª¡±£¬¿ÉÒÔÀí½âΪ¹²ÏíÔª¶ÔÏó£¨Ï¸Á£¶È¶ÔÏ󣩵ÄÒâ˼¡£Ìáµ½Flyweightģʽ¶¼»áÒ»°ã¶¼»áÓñ༭Æ÷Àý×ÓÀ´ËµÃ÷£¬ÕâÀïÒ²²»ÀýÍ⣬µ«Îһ᳢ÊÔ×Åͨ¹ýÖع¹À´¿´´ýFlyweightģʽ¡£¿¼ÂÇÕâÑùÒ»¸ö×Ö´¦ÀíÈí¼þ£¬ËüÐèÒª´¦ÀíµÄ¶ÔÏó¿ÉÄÜÓе¥¸öµÄ×Ö·û£¬ÓÉ×Ö·û×é³ÉµÄ¶ÎÂäÒÔ¼°ÕûƪÎĵµ£¬¸ù¾ÝÃæÏò¶ÔÏóµÄÉè¼Æ˼ÏëºÍCompositeģʽ£¬²»¹ÜÊÇ×Ö·û»¹ÊǶÎÂ䣬Îĵµ¶¼Ó¦¸Ã×÷Ϊµ¥¸öµÄ¶ÔÏóÈ¥¿´´ý£¬ÕâÀïÖ»¿¼Âǵ¥¸öµÄ×Ö·û£¬²»¿¼ÂǶÎÂä¼°ÎĵµµÈ¶ÔÏó£¬ÓÚÊÇ¿ÉÒÔºÜÈÝÒ׵ĵõ½ÏÂÃæµÄ½á¹¹Í¼£º

ͼ3

ʾÒâÐÔʵÏÖ´úÂ룺

public abstract class Charactor
{
//Fields
protected char _symbol;

protected int _width;

protected int _height;

protected int _ascent;

protected int _descent;

protected int _pointSize;

//Method
public abstract void Display();
}

// "CharactorA"
public class CharactorA : Charactor
{
// Constructor
public CharactorA()
{
this._symbol = 'A';
this._height = 100;
this._width = 120;
this._ascent = 70;
this._descent = 0;
this._pointSize = 12;
}

//Method
public override void Display()
{
Console.WriteLine(this._symbol);
}
}

// "CharactorB"
public class CharactorB : Charactor
{
// Constructor
public CharactorB()
{
this._symbol = 'B';
this._height = 100;
this._width = 140;
this._ascent = 72;
this._descent = 0;
this._pointSize = 10;
}

//Method
public override void Display()
{
Console.WriteLine(this._symbol);
}
}

// "CharactorC"
public class CharactorC : Charactor
{
// Constructor
public CharactorC()
{
this._symbol = 'C';
this._height = 100;
this._width = 160;
this._ascent = 74;
this._descent = 0;
this._pointSize = 14;
}

//Method
public override void Display()
{
Console.WriteLine(this._symbol);
}
}

ºÃÁË£¬ÏÖÔÚ¿´µ½µÄÕâ¶Î´úÂë¿ÉÒÔ˵ÊǺܺõطûºÏÁËÃæÏò¶ÔÏóµÄ˼Ï룬µ«ÊÇͬʱÎÒÃÇҲΪ´Ë¸¶³öÁ˳ÁÖصĴú¼Û£¬ÄǾÍÊÇÐÔÄÜÉϵĿªÏú£¬¿ÉÒÔÏëÏó£¬ÔÚһƪÎĵµÖУ¬×Ö·ûµÄÊýÁ¿Ô¶²»Ö¹¼¸°Ù¸öÕâô¼òµ¥£¬¿ÉÄÜÉÏǧÉÏÍò£¬ÄÚ´æÖоÍͬʱ´æÔÚÁËÉÏǧÉÏÍò¸öCharactor¶ÔÏó£¬ÕâÑùµÄÄڴ濪ÏúÊÇ¿ÉÏë¶øÖªµÄ¡£½øÒ»²½·ÖÎö¿ÉÒÔ·¢ÏÖ£¬ËäÈ»ÎÒÃÇÐèÒªµÄCharactorʵÀý·Ç³£¶à£¬ÕâЩʵÀýÖ®¼äÖ»²»¹ýÊÇ״̬²»Í¬¶øÒÑ£¬Ò²¾ÍÊÇ˵ÕâЩʵÀýµÄ״̬ÊýÁ¿ÊǺÜÉٵġ£ËùÒÔÎÒÃDz¢²»ÐèÒªÕâô¶àµÄ¶ÀÁ¢µÄCharactorʵÀý£¬¶øÖ»ÐèҪΪÿһÖÖCharactor״̬´´½¨Ò»¸öʵÀý£¬ÈÃÕû¸ö×Ö·û´¦ÀíÈí¼þ¹²ÏíÕâЩʵÀý¾Í¿ÉÒÔÁË¡£¿´ÕâÑùÒ»·ùʾÒâͼ£º

ͼ4

ÏÖÔÚÎÒÃÇ¿´µ½µÄA£¬B£¬CÈý¸ö×Ö·ûÊǹ²ÏíµÄ£¬Ò²¾ÍÊÇ˵Èç¹ûÎĵµÖÐÈκεط½ÐèÒªÕâÈý¸ö×Ö·û£¬Ö»ÐèҪʹÓù²ÏíµÄÕâÈý¸öʵÀý¾Í¿ÉÒÔÁË¡£È»¶øÎÒÃÇ·¢ÏÖµ¥´¿µÄÕâÑù¹²ÏíÒ²ÊÇÓÐÎÊÌâµÄ¡£ËäÈ»ÎĵµÖеÄÓõ½Á˺ܶàµÄA×Ö·û£¬ËäÈ»×Ö·ûµÄsymbolµÈÊÇÏàͬµÄ£¬Ëü¿ÉÒÔ¹²Ïí£»µ«ÊÇËüÃǵÄpointSizeÈ´ÊDz»ÏàͬµÄ£¬¼´×Ö·ûÔÚÎĵµÖÐÖеĴóСÊDz»ÏàͬµÄ£¬Õâ¸ö״̬²»¿ÉÒÔ¹²Ïí¡£Îª½â¾öÕâ¸öÎÊÌ⣬Ê×ÏÈÎÒÃǽ«²»¿É¹²ÏíµÄ״̬´ÓÀàÀïÃæÌÞ³ý³öÈ¥£¬¼´È¥µôpointSizeÕâ¸ö״̬£¨Ö»ÊÇÔÝʱµÄJ£©£¬Àà½á¹¹Í¼ÈçÏÂËùʾ£º

ͼ5

ʾÒâÐÔʵÏÖ´úÂ룺

public abstract class Charactor
{
//Fields
protected char _symbol;

protected int _width;

protected int _height;

protected int _ascent;

protected int _descent;

//Method
public abstract void Display();
}

// "CharactorA"
public class CharactorA : Charactor
{
// Constructor
public CharactorA()
{
this._symbol = 'A';
this._height = 100;
this._width = 120;
this._ascent = 70;
this._descent = 0;
}

//Method
public override void Display()
{
Console.WriteLine(this._symbol);
}
}

// "CharactorB"
public class CharactorB : Charactor
{
// Constructor
public CharactorB()
{
this._symbol = 'B';
this._height = 100;
this._width = 140;
this._ascent = 72;
this._descent = 0;
}

//Method
public override void Display()
{
Console.WriteLine(this._symbol);
}
}

// "CharactorC"
public class CharactorC : Charactor
{
// Constructor
public CharactorC()
{
this._symbol = 'C';
this._height = 100;
this._width = 160;
this._ascent = 74;
this._descent = 0;
}

//Method
public override void Display()
{
Console.WriteLine(this._symbol);
}
}

ºÃ£¬ÏÖÔÚÀàÀïÃæʣϵÄ״̬¶¼¿ÉÒÔ¹²ÏíÁË£¬ÏÂÃæÎÒÃÇÒª×öµÄ¹¤×÷¾ÍÊÇ¿ØÖÆCharactorÀàµÄ´´½¨¹ý³Ì£¬¼´Èç¹ûÒѾ­´æÔÚÁË¡°A¡±×Ö·ûÕâÑùµÄʵÀý£¬¾Í²»ÐèÒªÔÙ´´½¨£¬Ö±½Ó·µ»ØʵÀý£»Èç¹ûûÓУ¬Ôò´´½¨Ò»¸öеÄʵÀý¡£Èç¹û°ÑÕâÏ×÷½»¸øCharactorÀ࣬¼´CharactorÀàÔÚ¸ºÔðËü×ÔÉíÖ°ÔðµÄͬʱҲҪ¸ºÔð¹ÜÀíCharactorʵÀýµÄ¹ÜÀí¹¤×÷£¬ÕâÔÚÒ»¶¨³Ì¶ÈÉÏÓпÉÄÜÎ¥±³ÀàµÄµ¥Ò»Ö°ÔðÔ­Ôò£¬Òò´Ë£¬ÐèÒªÒ»¸öµ¥¶ÀµÄÀàÀ´×öÕâÏ×÷£¬ÒýÈëCharactorFactoryÀ࣬½á¹¹Í¼ÈçÏ£º

ͼ6

ʾÒâÐÔʵÏÖ´úÂ룺

public class CharactorFactory
{
// Fields
private Hashtable charactors = new Hashtable();

// Constructor
public CharactorFactory()
{
charactors.Add("A", new CharactorA());
charactors.Add("B", new CharactorB());
charactors.Add("C", new CharactorC());
}

// Method
public Charactor GetCharactor(string key)
{
Charactor charactor = charactors[key] as Charactor;

if (charactor == null)
{
switch (key)
{
case "A": charactor = new CharactorA(); break;
case "B": charactor = new CharactorB(); break;
case "C": charactor = new CharactorC(); break;
//
}
charactors.Add(key, charactor);
}
return charactor;
}
}

µ½ÕâÀïÒѾ­ÍêÈ«½â¾öÁË¿ÉÒÔ¹²ÏíµÄ״̬£¨ÕâÀïºÜ³óªµÄÒ»¸öµØ·½ÊdzöÏÖÁËswitchÓï¾ä£¬µ«Õâ¿ÉÒÔͨ¹ý±ðµÄ°ì·¨Ïû³ý£¬ÎªÁ˼òµ¥ÆÚ¼äÎÒÃÇÏȱ£³ÖÕâÖÖд·¨£©¡£ÏÂÃæµÄ¹¤×÷¾ÍÊÇ´¦Àí¸Õ²Å±»ÎÒÃÇÌÞ³ý³öÈ¥µÄÄÇЩ²»¿É¹²ÏíµÄ״̬£¬ÒòΪËäÈ»½«ÄÇЩ״̬ÒƳýÁË£¬µ«ÊÇCharactor¶ÔÏóÈÔÈ»ÐèÒªÕâЩ״̬£¬±»ÎÒÃÇ°þÀëºóÕâЩ¶ÔÏó¸ù±¾¾ÍÎÞ·¨¹¤×÷£¬ËùÒÔÐèÒª½«ÕâЩ״̬Íⲿ»¯¡£Ê×ÏÈ»áÏëµ½Ò»ÖֱȽϼòµ¥µÄ½â¾ö·½°¸¾ÍÊǶÔÓÚ²»Äܹ²ÏíµÄÄÇЩ״̬£¬²»ÐèҪȥÔÚCharactorÀàÖÐÉèÖ㬶øÖ±½ÓÔÚ¿Í»§³ÌÐò´úÂëÖнøÐÐÉèÖã¬Àà½á¹¹Í¼ÈçÏ£º

ͼ7

ʾÒâÐÔʵÏÖ´úÂ룺

public class Program
{
public static void Main()
{
Charactor ca = new CharactorA();
Charactor cb = new CharactorB();
Charactor cc = new CharactorC();

//ÏÔʾ×Ö·û

//ÉèÖÃ×Ö·ûµÄ´óСChangeSize();
}

public void ChangeSize()
{
//ÔÚÕâÀïÉèÖÃ×Ö·ûµÄ´óС
}
}

°´ÕÕÕâÑùµÄʵÏÖ˼·£¬¿ÉÒÔ·¢ÏÖÈç¹ûÓжà¸ö¿Í»§¶Ë³ÌÐòʹÓõĻ°£¬»á³öÏÖ´óÁ¿µÄÖظ´ÐÔµÄÂß¼­£¬ÓÃÖع¹µÄÊõÓïÀ´ËµÊdzöÏÖÁË´úÂëµÄ»µÎ¶µÀ£¬²»ÀûÓÚ´úÂëµÄ¸´ÓúÍά»¤£»ÁíÍâ°ÑÕâЩ״̬ºÍÐÐΪÒƵ½¿Í»§³ÌÐòÀïÃæÆÆ»µÁË·â×°ÐÔµÄÔ­Ôò¡£ÔÙ´Îת±äÎÒÃǵÄʵÏÖ˼·£¬¿ÉÒÔÈ·¶¨µÄÊÇÕâЩ״̬ÈÔÈ»ÊôÓÚCharactor¶ÔÏó£¬ËùÒÔËü»¹ÊÇÓ¦¸Ã³öÏÖÔÚCharactorÀàÖУ¬¶ÔÓÚ²»Í¬µÄ״̬¿ÉÒÔ²ÉÈ¡ÔÚ¿Í»§³ÌÐòÖÐͨ¹ý²ÎÊý»¯µÄ·½Ê½´«Èë¡£Àà½á¹¹Í¼ÈçÏ£º

ͼ8

ʾÒâÐÔʵÏÖ´úÂ룺

public abstract class Charactor
{
//Fields
protected char _symbol;

protected int _width;

protected int _height;

protected int _ascent;

protected int _descent;

protected int _pointSize;

//Method
public abstract void SetPointSize(int size);
public abstract void Display();
}

// "CharactorA"
public class CharactorA : Charactor
{
// Constructor
public CharactorA()
{
this._symbol = 'A';
this._height = 100;
this._width = 120;
this._ascent = 70;
this._descent = 0;
}

//Method
public override void SetPointSize(int size)
{
this._pointSize = size;
}

public override void Display()
{
Console.WriteLine(this._symbol +
"pointsize:" + this._pointSize);
}
}

// "CharactorB"
public class CharactorB : Charactor
{
// Constructor
public CharactorB()
{
this._symbol = 'B';
this._height = 100;
this._width = 140;
this._ascent = 72;
this._descent = 0;
}

//Method
public override void SetPointSize(int size)
{
this._pointSize = size;
}

public override void Display()
{
Console.WriteLine(this._symbol +
"pointsize:" + this._pointSize);
}
}

// "CharactorC"
public class CharactorC : Charactor
{
// Constructor
public CharactorC()
{
this._symbol = 'C';
this._height = 100;
this._width = 160;
this._ascent = 74;
this._descent = 0;
}

//Method
public override void SetPointSize(int size)
{
this._pointSize = size;
}

public override void Display()
{
Console.WriteLine(this._symbol +
"pointsize:" + this._pointSize);
}
}

// "CharactorFactory"
public class CharactorFactory
{
// Fields
private Hashtable charactors = new Hashtable();

// Constructor
public CharactorFactory()
{
charactors.Add("A", new CharactorA());
charactors.Add("B", new CharactorB());
charactors.Add("C", new CharactorC());
}

// Method
public Charactor GetCharactor(string key)
{
Charactor charactor = charactors[key] as Charactor;

if (charactor == null)
{
switch (key)
{
case "A": charactor = new CharactorA(); break;
case "B": charactor = new CharactorB(); break;
case "C": charactor = new CharactorC(); break;
//
}
charactors.Add(key, charactor);
}
return charactor;
}
}

public class Program
{
public static void Main()
{
CharactorFactory factory = new CharactorFactory();

// Charactor "A"
CharactorA ca = (CharactorA)factory.GetCharactor("A");
ca.SetPointSize(12);
ca.Display();

// Charactor "B"
CharactorB cb = (CharactorB)factory.GetCharactor("B");
ca.SetPointSize(10);
ca.Display();

// Charactor "C"
CharactorC cc = (CharactorC)factory.GetCharactor("C");
ca.SetPointSize(14);
ca.Display();
}
}

¿ÉÒÔ¿´µ½ÕâÑùµÄʵÏÖÃ÷ÏÔÓÅÓÚµÚÒ»ÖÖʵÏÖ˼·¡£ºÃÁË£¬µ½ÕâÀïÎÒÃǾ͵½µ½ÁËͨ¹ýFlyweightģʽʵÏÖÁËÓÅ»¯×ÊÔ´µÄÕâÑùÒ»¸öÄ¿µÄ¡£ÔÚÕâ¸ö¹ý³ÌÖУ¬»¹ÓÐÈçϼ¸µãÐèҪ˵Ã÷£º

1£®ÒýÈëCharactorFactoryÊǸö¹Ø¼ü£¬ÔÚÕâÀï´´½¨¶ÔÏóÒѾ­²»ÊÇnewÒ»¸öCharactor¶ÔÏóÄÇô¼òµ¥£¬¶ø±ØÐëÓù¤³§·½·¨·â×°ÆðÀ´¡£

2£®ÔÚÕâ¸öÀý×ÓÖаÑCharactor¶ÔÏó×÷ΪFlyweight¶ÔÏóÊÇ·ñ׼ȷֵµÄ¿¼ÂÇ£¬ÕâÀïÖ»ÊÇΪÁË˵Ã÷Flyweightģʽ£¬ÖÁÓÚÔÚʵ¼ÊÓ¦ÓÃÖУ¬ÄÄЩ¶ÔÏóÐèÒª×÷ΪFlyweight¶ÔÏóÊÇÒª¾­¹ýºÜºÃµÄ¼ÆËãµÃÖª£¬¶ø¾ø²»ÊÇƾ¿ÕÒÜÏë¡£

3£®Çø·ÖÄÚÍⲿ״̬ºÜÖØÒª£¬ÕâÊÇÏíÔª¶ÔÏóÄÜ×öµ½ÏíÔªµÄ¹Ø¼üËùÔÚ¡£

µ½ÕâÀÆäʵÎÒÃǵÄÌÖÂÛ»¹Ã»ÓнáÊø¡£ÓÐÈË¿ÉÄÜ»áÌá³öÈçÏÂÎÊÌ⣬ÏíÔª¶ÔÏó£¨Charactor£©ÔÚÕâ¸öϵͳÖÐÏà¶ÔÓÚÿһ¸öÄÚ²¿×´Ì¬¶øÑÔËüÊÇΨһµÄ£¬Õâ¸úµ¥¼þģʽÓÐʲôÇø±ðÄØ£¿Õâ¸öÎÊÌâÒѾ­ºÜºÃ»Ø´ðÁË£¬ÄǾÍÊǵ¥¼þÀàÊDz»ÄÜÖ±½Ó±»ÊµÀý»¯µÄ£¬¶øÏíÔªÀàÊÇ¿ÉÒÔ±»ÊµÀý»¯µÄ¡£ÊÂʵÉÏÔÚÕâÀïÃæÕæÕý±»Éè¼ÆΪµ¥¼þµÄÓ¦¸ÃÊÇÏíÔª¹¤³§£¨²»ÊÇÏíÔª£©À࣬ÒòΪÈç¹û´´½¨ºÜ¶à¸öÏíÔª¹¤³§µÄʵÀý£¬ÄÇÎÒÃÇËù×öµÄÒ»ÇÐŬÁ¦¶¼Êǰ׷ѵģ¬²¢Ã»ÓмõÉÙ¶ÔÏóµÄ¸öÊý¡£Ð޸ĺóµÄÀà½á¹¹Í¼ÈçÏ£º

ͼ9

ʾÒâÐÔʵÏÖ´úÂ룺

public class CharactorFactory
{
// Fields
private Hashtable charactors = new Hashtable();

private CharactorFactory instance;
// Constructor
private CharactorFactory()
{
charactors.Add("A", new CharactorA());
charactors.Add("B", new CharactorB());
charactors.Add("C", new CharactorC());
}

// Property
public CharactorFactory Instance
{
get
{
if (instance != null)
{
instance = new CharactorFactory();
}
return instance;
}
}

// Method
public Charactor GetCharactor(string key)
{
Charactor charactor = charactors[key] as Charactor;

if (charactor == null)
{
switch (key)
{
case "A": charactor = new CharactorA(); break;
case "B": charactor = new CharactorB(); break;
case "C": charactor = new CharactorC(); break;
//
}
charactors.Add(key, charactor);
}
return charactor;
}
}

 
                              

.NET¿ò¼ÜÖеÄFlyweight

Flyweight¸ü¶àʱºòµÄʱºòÒ»ÖֵײãµÄÉè¼Æģʽ£¬ÔÚÎÒÃǵÄʵ¼ÊÓ¦ÓóÌÐòÖÐʹÓõIJ¢²»ÊǺܶࡣÔÚ.NETÖеÄStringÀàÐÍÆäʵ¾ÍÊÇÔËÓÃÁËFlyweightģʽ¡£¿ÉÒÔÏëÏó£¬Èç¹ûÿ´ÎÖ´ÐÐstring s1 = ¡°abcd¡±²Ù×÷£¬¶¼´´½¨Ò»¸öеÄ×Ö·û´®¶ÔÏóµÄ»°£¬ÄÚ´æµÄ¿ªÏú»áºÜ´ó¡£ËùÒÔ.NETÖÐÈç¹ûµÚÒ»´Î´´½¨ÁËÕâÑùµÄÒ»¸ö×Ö·û´®¶ÔÏós1£¬Ï´ÎÔÙ´´½¨ÏàͬµÄ×Ö·û´®s2ʱֻÊÇ°ÑËüµÄÒýÓÃÖ¸Ïò¡°abcd¡±£¬ÕâÑù¾ÍʵÏÖÁË¡°abcd¡±ÔÚÄÚ´æÖеĹ²Ïí¡£¿ÉÒÔͨ¹ýÏÂÃæÒ»¸ö¼òµ¥µÄ³ÌÐòÀ´ÑÝʾs1ºÍs2µÄÒýÓÃÊÇ·ñÒ»Ö£º

public class Program
{
public static void Main(string[] args)
{
string s1 = "abcd";
string s2 = "abcd";

Console.WriteLine(Object.ReferenceEquals(s1,s2));

Console.ReadLine();
}
}

¿ÉÒÔ¿´µ½£¬Êä³öµÄ½á¹ûΪTrue¡£µ«ÊÇ´ó¼ÒҪעÒâµÄÊÇÈç¹ûÔÙÓÐÒ»¸ö×Ö·û´®s3£¬ËüµÄ³õʼֵΪ¡°ab¡±£¬ÔÙ¶ÔËü½øÐвÙ×÷s3 = s3 + ¡°cd¡±£¬ÕâʱËäÈ»s1ºÍs3µÄÖµÏàͬ£¬µ«ÊÇËüÃǵÄÒýÓÃÊDz»Í¬µÄ¡£¹ØÓÚStringµÄÏêϸÇé¿ö´ó¼Ò¿ÉÒԲο¼SDK£¬ÕâÀï²»ÔÙÌÖÂÛÁË¡£

Ч¹û¼°ÊµÏÖÒªµã

1£®ÃæÏò¶ÔÏóºÜºÃµÄ½â¾öÁ˳éÏóÐÔµÄÎÊÌ⣬µ«ÊÇ×÷Ϊһ¸öÔËÐÐÔÚ»úÆ÷ÖеijÌÐòʵÌ壬ÎÒÃÇÐèÒª¿¼ÂǶÔÏóµÄ´ú¼ÛÎÊÌâ¡£FlyweightÉè¼ÆģʽÖ÷Òª½â¾öÃæÏò¶ÔÏóµÄ´ú¼ÛÎÊÌ⣬һ°ã²»´¥¼°ÃæÏò¶ÔÏóµÄ³éÏóÐÔÎÊÌâ¡£

2£®Flyweight²ÉÓöÔÏó¹²ÏíµÄ×ö·¨À´½µµÍϵͳÖжÔÏóµÄ¸öÊý£¬´Ó¶ø½µµÍϸÁ£¶È¶ÔÏó¸øϵͳ´øÀ´µÄÄÚ´æѹÁ¦¡£ÔÚ¾ßÌåʵÏÖ·½Ã棬ҪעÒâ¶ÔÏó״̬µÄ´¦Àí¡£

3£®ÏíԪģʽµÄÓŵãÔÚÓÚËü´ó·ù¶ÈµØ½µµÍÄÚ´æÖжÔÏóµÄÊýÁ¿¡£µ«ÊÇ£¬Ëü×öµ½ÕâÒ»µãËù¸¶³öµÄ´ú¼ÛÒ²ÊǺܸߵģºÏíԪģʽʹµÃϵͳ¸ü¼Ó¸´ÔÓ¡£ÎªÁËʹ¶ÔÏó¿ÉÒÔ¹²Ïí£¬ÐèÒª½«Ò»Ð©×´Ì¬Íⲿ»¯£¬ÕâʹµÃ³ÌÐòµÄÂß¼­¸´ÔÓ»¯¡£ÁíÍâËü½«ÏíÔª¶ÔÏóµÄ״̬Íⲿ»¯£¬¶ø¶ÁÈ¡Íⲿ״̬ʹµÃÔËÐÐʱ¼äÉÔ΢±ä³¤¡£

ÊÊÓÃÐÔ

µ±ÒÔÏÂËùÓеÄÌõ¼þ¶¼Âú×ãʱ£¬¿ÉÒÔ¿¼ÂÇʹÓÃÏíԪģʽ£º

1¡¢ Ò»¸öϵͳÓдóÁ¿µÄ¶ÔÏó¡£

2¡¢ ÕâЩ¶ÔÏóºÄ·Ñ´óÁ¿µÄÄÚ´æ¡£

3¡¢ ÕâЩ¶ÔÏóµÄ״̬ÖеĴ󲿷ֶ¼¿ÉÒÔÍⲿ»¯¡£

4¡¢ ÕâЩ¶ÔÏó¿ÉÒÔ°´ÕÕÄÚÔÌ״̬·Ö³ÉºÜ¶àµÄ×飬µ±°ÑÍâÔ̶ÔÏó´Ó¶ÔÏóÖÐÌÞ³ýʱ£¬Ã¿Ò»¸ö×鶼¿ÉÒÔ½öÓÃÒ»¸ö¶ÔÏó´úÌæ¡£

5¡¢ Èí¼þϵͳ²»ÒÀÀµÓÚÕâЩ¶ÔÏóµÄÉí·Ý£¬»»ÑÔÖ®£¬ÕâЩ¶ÔÏó¿ÉÒÔÊDz»¿É·Ö±æµÄ¡£

Âú×ãÒÔÉϵÄÕâЩÌõ¼þµÄϵͳ¿ÉÒÔʹÓÃÏíÔª¶ÔÏó¡£×îºó£¬Ê¹ÓÃÏíԪģʽÐèҪά»¤Ò»¸ö¼Ç¼ÁËϵͳÒÑÓеÄËùÓÐÏíÔªµÄ±í£¬¶øÕâÐèÒªºÄ·Ñ×ÊÔ´¡£Òò´Ë£¬Ó¦µ±ÔÚÓÐ×ã¹»¶àµÄÏíԪʵÀý¿É¹©¹²Ïíʱ²ÅÖµµÃʹÓÃÏíԪģʽ¡£

×ܽá

Flyweightģʽ½â¾öµÄÊÇÓÉÓÚ´óÁ¿µÄϸÁ£¶È¶ÔÏóËùÔì³ÉµÄÄڴ濪ÏúµÄÎÊÌ⣬ËüÔÚʵ¼ÊµÄ¿ª·¢Öв¢²»³£Ó㬵«ÊÇ×÷Ϊµ×²ãµÄÌáÉýÐÔÄܵÄÒ»ÖÖÊÖ¶ÎÈ´ºÜÓÐЧ¡£

   
2518 ´Îä¯ÀÀ       19
Ïà¹ØÎÄÕÂ

ΪʲôҪ×ö³ÖÐø²¿Êð£¿
ÆÊÎö¡°³ÖÐø½»¸¶¡±£ºÎå¸öºËÐÄʵ¼ù
¼¯³ÉÓë¹¹½¨Ö¸ÄÏ
³ÖÐø¼¯³É¹¤¾ßµÄÑ¡Ôñ-×°ÔØ
 
Ïà¹ØÎĵµ

³ÖÐø¼¯³É½éÉÜ
ʹÓÃHudson³ÖÐø¼¯³É
³ÖÐø¼¯³ÉÖ®-ÒÀÀµ¹ÜÀí
IPD¼¯³É²úÆ·¿ª·¢¹ÜÀí
Ïà¹Ø¿Î³Ì

ÅäÖùÜÀí¡¢ÈÕ¹¹½¨Óë³ÖÐø¼¯³É
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
µ¥Ôª²âÊÔ¡¢Öع¹¼°³ÖÐø¼¯³É
»ùÓÚAndroidµÄµ¥Ôª¡¢ÐÔÄܲâÊÔ
×îл¼Æ»®
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù 8-23[ÌØ»Ý]
LinuxÄں˱à³Ì¼°É豸Çý¶¯ 8-15[±±¾©]
Python¡¢Êý¾Ý·ÖÎöÓë»úÆ÷ѧϰ 8-23[ÌØ»Ý]
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ 8-22[ÏßÉÏ]
QTÓ¦Óÿª·¢ 9-5[±±¾©]

Öع¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
Visitor Parttern
ÓÉ±í¼°À￴ģʽ
Éè¼ÆģʽËæ±ÊϵÁÐ
ÉîÈëdz³öÉè¼Æģʽ-½éÉÜ
.NETÖеÄÉè¼Æģʽ

Ïà¹ØÅàѵ¿Î³Ì

J2EEÉè¼ÆģʽºÍÐÔÄܵ÷ÓÅ
Ó¦ÓÃģʽÉè¼ÆJavaÆóÒµ¼¶Ó¦ÓÃ
Éè¼ÆģʽԭÀíÓëÓ¦ÓÃ
J2EEÉè¼ÆģʽָÄÏ
µ¥Ôª²âÊÔ+Öع¹+Éè¼Æģʽ
Éè¼Æģʽ¼°ÆäCSharpʵÏÖ


ijµçÁ¦¹«Ë¾ Éè¼ÆģʽԭÀí
À¶ÍØÆË Éè¼ÆģʽԭÀí¼°Ó¦ÓÃ
ÎÀÐǵ¼º½ UML & OOAD
ÌÀɭ·͸Ñз¢ÖÐÐÄ UML& OOAD
Öдïµçͨ Éè¼ÆģʽԭÀí
Î÷ÃÅ×Ó Ç¶ÈëʽÉè¼Æģʽ
 
 
 
¡¡