¸ÅÊö
´´½¨ÐÍģʽ£¬¾ÍÊÇÓÃÀ´´´½¨¶ÔÏóµÄģʽ£¬³éÏóÁËʵÀý»¯µÄ¹ý³Ì¡£Ëü°ïÖúÒ»¸öϵͳ¶ÀÁ¢ÓÚÈçºÎ´´½¨¡¢×éºÏºÍ±íʾËüµÄÄÇЩ¶ÔÏó¡£±¾ÎĶÔÎåÖÖ³£Óô´½¨ÐÍģʽ½øÐÐÁ˱Ƚϣ¬Í¨¹ýÒ»¸öÓÎÏ·¿ª·¢³¡¾°µÄÀý×ÓÀ´Ëµ¸ÃÈçºÎʹÓô´½¨ÐÍģʽ¡£
ΪʲôÐèÒª´´½¨ÐÍģʽ
ËùÓеĴ´½¨ÐÍģʽ¶¼ÓÐÁ½¸öÓÀºãµÄÖ÷ÐýÂÉ£ºµÚÒ»£¬ËüÃǶ¼½«ÏµÍ³Ê¹ÓÃÄÄЩ¾ßÌåÀàµÄÐÅÏ¢·â×°ÆðÀ´£»µÚ¶þ£¬ËüÃÇÒþ²ØÁËÕâЩÀàµÄʵÀýÊÇÈçºÎ±»´´½¨ºÍ×éÖ¯µÄ¡£Íâ½ç¶ÔÓÚÕâЩ¶ÔÏóÖ»ÖªµÀËüÃǹ²Í¬µÄ½Ó¿Ú£¬¶ø²»Çå³þÆä¾ßÌåµÄʵÏÖϸ½Ú¡£ÕýÒòÈç´Ë£¬´´½¨ÐÍģʽÔÚ´´½¨Ê²Ã´£¨what£©£¬ÓÉË£¨who£©À´´´½¨£¬ÒÔ¼°ºÎʱ£¨when£©´´½¨ÕâЩ·½Ã棬¶¼ÎªÈí¼þÉè¼ÆÕßÌṩÁ˾¡¿ÉÄÜ´óµÄÁé»îÐÔ¡£
¼Ù¶¨ÔÚÒ»¸öÓÎÏ·¿ª·¢³¡¾°ÖУ¬»áÓõ½Ò»¸öÏÖ´ú·ç¸ñ·¿ÎݵĶÔÏ󣬰´ÕÕÎÒÃǵÄÒ»°ãÏë·¨£¬¼ÈÈ»ÐèÒª¶ÔÏó¾Í´´½¨Ò»¸ö£º
ModernRoom room = new ModernRoom();
ºÃÁË£¬ÏÖÔÚÏÖ´ú·ç¸ñ·¿ÎݵĶÔÏóÒѾÓÐÁË£¬Èç¹ûÕâʱ·¿Îݵķç¸ñ±ä»¯ÁË£¬ÐèÒªµÄÊǹŵä·ç¸ñµÄ·¿ÎÝ£¬ÐÞ¸Äһϣº
ClassicalRoom room = new ClassicalRoom();
ÊÔÏëһϣ¬ÔÚÎÒÃǵijÌÐòÖÐÓжàÉÙ´¦µØ·½Óõ½ÁËÕâÑùµÄ´´½¨Âß¼£¬¶øÕâÀï½ö½öÊÇ·¿Îݵķç¸ñ±ä»¯ÁË£¬¾ÍÐèÒªÐ޸ijÌÐòÖÐËùÓеÄÕâÑùµÄÓï¾ä¡£ÏÖÔÚÎÒÃÇ·â×°¶ÔÏó´´½¨µÄÂß¼£¬°Ñ¶ÔÏóµÄ´´½¨·ÅÔÚÒ»¸ö¹¤³§·½·¨ÖУº
ModernFactory factory = new ModernFactory();
ModernRoom room = factory.Create();
µ±·¿Îݵķç¸ñ±ä»¯Ê±£¬Ö»ÐèÒªÐÞ¸Ä
ClassicalFactory factory = new ClassicalFactory();
ClassicalRoom room = factory.Create();
¶øÆäËüµÄÓõ½roomµÄµØ·½ÈÔÈ»²»±ä¡£Õâ¾ÍÊÇΪʲôÐèÒª´´½¨ÐÍģʽÁË¡£´´½¨Õßģʽ×÷ÓÿÉÒÔ¸ÅÀ¨ÎªÈçÏÂÁ½µã£º
1£®·â×°´´½¨Âß¼£¬¾ø²»½ö½öÊÇnewÒ»¸ö¶ÔÏóÄÇô¼òµ¥¡£
2£®·â×°´´½¨Âß¼±ä»¯£¬¿Í»§´úÂ뾡Á¿²»Ð޸쬻ò¾¡Á¿ÉÙÐ޸ġ£
³£¼ûµÄÎåÖÖ´´½¨ÐÍģʽ
1.µ¥¼þģʽ£¨Singleton Pattern£©½â¾öµÄÊÇʵÌå¶ÔÏóµÄ¸öÊýÎÊÌ⣬ÆäËûµÄ¶¼Êǽâ¾önewËù´øÀ´µÄñîºÏ¹ØÏµÎÊÌâ¡£
2.¹¤³§·½·¨Ä£Ê½£¨Factory Pattern£©ÔÚ¹¤³§·½·¨ÖУ¬¹¤³§Àà³ÉΪÁ˳éÏóÀ࣬Æäʵ¼ÊµÄ´´½¨¹¤×÷½«ÓÉÆä¾ßÌå×ÓÀàÀ´Íê³É¡£¹¤³§·½·¨µÄÓÃÒâÊǶ¨ÒåÒ»¸ö´´½¨²úÆ·¶ÔÏóµÄ¹¤³§½Ó¿Ú£¬½«Êµ¼Ê´´½¨¹¤×÷ÍÆ³Ùµ½×ÓÀàÖÐÈ¥£¬Ç¿µ÷µÄÊÇ¡°µ¥¸ö¶ÔÏ󡱵ı仯¡£
3.³éÏ󹤳§Ä£Ê½£¨Abstract Factory£©³éÏ󹤳§ÊÇËùÓй¤³§Ä£Ê½ÖÐ×îΪ³éÏóºÍ×î¾ßÓÐÒ»°ãÐÔµÄÒ»ÖÖÐÎ̬¡£³éÏ󹤳§¿ÉÒÔÏò¿Í»§Ìṩһ¸ö½Ó¿Ú£¬Ê¹µÃ¿Í»§¿ÉÒÔÔÚ²»±ØÖ¸¶¨²úÆ·µÄ¾ßÌåÀàÐ͵ÄÇé¿öÏ£¬´´½¨¶à¸ö²úÆ·×åÖеIJúÆ·¶ÔÏó£¬Ç¿µ÷µÄÊÇ¡°ÏµÁжÔÏ󡱵ı仯¡£
4.Éú³ÉÆ÷ģʽ£¨Builder Pattern£©°Ñ¹¹Ôì¶ÔÏóʵÀýµÄÂß¼ÒÆµ½ÁËÀàµÄÍⲿ£¬ÔÚÕâ¸öÀàµÄÍⲿ¶¨ÒåÁËÕâ¸öÀàµÄ¹¹ÔìÂß¼¡£Ëû°ÑÒ»¸ö¸´ÔÓ¶ÔÏóµÄ¹¹Ôì¹ý³Ì´Ó¶ÔÏóµÄ±íʾÖзÖÀë³öÀ´¡£ÆäÖ±½ÓЧ¹ûÊǽ«Ò»¸ö¸´ÔӵĶÔÏó¼ò»¯ÎªÒ»¸ö±È½Ï¼òµ¥µÄÄ¿±ê¶ÔÏó¡£ËûÇ¿µ÷µÄÊDzúÆ·µÄ¹¹Ôì¹ý³Ì¡£
5.ÔÐÍģʽ£¨Prototype Pattern£©ºÍ¹¤³§Ä£Ê½Ò»Ñù£¬Í¬Ñù¶Ô¿Í»§Òþ²ØÁ˶ÔÏó´´½¨¹¤×÷£¬µ«ÊÇ£¬Óëͨ¹ý¶ÔÒ»¸öÀà½øÐÐʵÀý»¯À´¹¹ÔìжÔÏó²»Í¬µÄÊÇ£¬ÔÐÍģʽÊÇͨ¹ý¿½±´Ò»¸öÏÖÓжÔÏóÉú³ÉжÔÏóµÄ¡£
ÈçºÎÑ¡ÔñʹÓô´½¨ÐÍģʽ
¼ÌÐø¿¼ÂÇÉÏÃæÌáµ½µÄÓÎÏ·¿ª·¢³¡¾°£¬¼Ù¶¨ÔÚÕâ¸öÓÎÏ·³¡¾°ÖÐÎÒÃÇʹÓõ½µÄÓÐǽ£¨Wall£©£¬ÎÝ×Ó£¨Room£©£¬ÃÅ£¨Door£©¼¸¸ö²¿¼þ¡£ÔÚÕâ¸ö¹ý³ÌÖУ¬Í¬ÑùÊǶÔÏóµÄ´´½¨ÎÊÌ⣬µ«ÊÇ»á¸ù¾ÝËùÒª½â¾öµÄÎÊÌⲻͬ¶øÊ¹Óò»Í¬µÄ´´½¨ÐÍģʽ¡£
Èç¹ûÔÚÓÎÏ·ÖУ¬Ò»¸öÎÝ×ÓÖ»ÔÊÐíÓÐÒ»¸öÃÅ´æÔÚ£¬ÄÇôÕâ¾ÍÊÇÒ»¸öʹÓÃSignletonģʽµÄÀý×Ó£¬È·±£Ö»ÓÐÒ»¸öDoorÀàµÄʵÀý±»´´½¨¡£½â¾öµÄÊǶÔÏó´´½¨¸öÊýµÄÎÊÌâ¡£

ʾÀý´úÂ룺
using System;
public sealed class SigletonDoor
{
static readonly SigletonDoor instance=new SigletonDoor();
static SigletonDoor()
{
}
public static SigletonDoor Instance
{
get
{
return instance;
}
}
}
|
ÔÚÓÎÏ·ÖÐÐèÒª´´½¨Ç½£¬ÎÝ×ÓµÄʵÀýʱ£¬ÎªÁ˱ÜÃâÖ±½Ó¶Ô¹¹ÔìÆ÷µÄµ÷ÓöøÊµÀý»¯À࣬Õâʱ¾ÍÊǹ¤³§·½·¨Ä£Ê½ÁË£¬Ã¿Ò»¸ö²¿¼þ¶¼ÓÐËü×Ô¼ºµÄ¹¤³§Àà¡£½â¾öµÄÊÇ¡°µ¥¸ö¶ÔÏó¡±µÄÐèÇó±ä»¯ÎÊÌâ¡£

ʾÀý´úÂ룺
using System;
public abstract class Wall
{
public abstract void Display();
}
public class ModernWall:Wall
{
public override void Display()
{
Console.WriteLine("ModernWall Builded");
}
}
public abstract class WallFactory
{
public abstract Wall Create();
}
public class ModernFactory:WallFactory
{
public override Wall Create()
{
return new ModernWall();;
}
}
|
ÔÚÓÎÏ·³¡¾°ÖУ¬²»¿ÉÄÜÖ»ÓÐÒ»ÖÖǽ»òÎÝ×Ó£¬ÓпÉÄÜÓÐÏÖ´ú·ç¸ñ£¨Modern£©£¬¹Åµä·ç¸ñ£¨Classical£©µÈ¶àϵÁзç¸ñµÄ²¿¼þ¡£Õâʱ¾ÍÊÇһϵÁжÔÏóµÄ´´½¨ÎÊÌâÁË£¬ÊÇÒ»¸ö³éÏ󹤳§µÄÀý×Ó¡£½â¾öµÄÊÇ¡°ÏµÁжÔÏó¡±µÄÐèÇó±ä»¯ÎÊÌâ¡£

ʾÀý´úÂ룺
using System;
public abstract class Wall
{
public abstract void Display();
}
public class ModernWall:Wall
{
public override void Display()
{
Console.WriteLine("ModernWall Builded");
}
}
public class ClassicalWall:Wall
{
public override void Display()
{
Console.WriteLine("ClassicalWall Builded");
}
}
public abstract class Room
{
public abstract void Display();
}
public class ModernRoom:Room
{
public override void Display()
{
Console.WriteLine("ModernRoom Builded");
}
}
public class ClassicalRoom:Room
{
public override void Display()
{
Console.WriteLine("ClassicalRoom Builded");
}
}
public abstract class AbstractFactory
{
public abstract Wall CreateWall();
public abstract Room CreateRoom();
}
public class ModernFactory:AbstractFactory
{
public override Wall CreateWall()
{
return new ModernWall();
}
public override Room CreateRoom()
{
return new ModernRoom();
}
}
public class ClassicalFactory:AbstractFactory
{
public override Wall CreateWall()
{
return new ClassicalWall();
}
public override Room CreateRoom()
{
return new ClassicalRoom();
}
}
|
Èç¹ûÔÚÓÎÏ·³¡¾°ÖУ¬¹¹³Éijһ¸ö³¡¾°µÄËã·¨±È½ÏÎȶ¨£¬ÀýÈ磺Õâ¸ö³¡¾°¾ÍÊÇÓÃËĶÂǽ£¬Ò»¸öÎÝ×Ó£¬Ò»ÉÈÃÅÀ´¹¹³ÉµÄ£¬µ«¾ßÌåÊÇÓÃʲô·ç¸ñµÄǽ¡¢ÎÝ×ÓºÍÃÅÔòÊDz»Í£µÄ±ä»¯µÄ£¬Õâ¾ÍÊÇÒ»¸öÉú³ÉÆ÷ģʽµÄÀý×Ó¡£½â¾öµÄÊÇ¡°¶ÔÏ󲿷֡±µÄÐèÇó±ä»¯ÎÊÌâ¡£

ʾÀý´úÂ룺
using System;
using System.Collections;
public class Director
{
public void Construct( Builder builder )
{
builder.BuildWall();
builder.BuildRoom();
builder.BuildDoor();
}
}
public abstract class Builder
{
public abstract void BuildWall();
public abstract void BuildRoom();
public abstract void BuildDoor();
public abstract GameScene GetResult();
}
public class GameBuilder : Builder
{
private GameScene g;
public override void BuildWall()
{
g = new GameScene();
g.Add( "Wall" );
}
public override void BuildRoom()
{
g.Add( "Room" );
}
public override void BuildDoor()
{
g.Add( "Door" );
}
public override GameScene GetResult()
{
return g;
}
}
public class GameScene
{
ArrayList parts = new ArrayList();
public void Add( string part )
{
parts.Add( part );
}
public void Display()
{
Console.WriteLine( " GameScene Parts£º" );
foreach( string part in parts )
Console.WriteLine( part );
}
}
|
Èç¹ûÔÚÓÎÏ·ÖУ¬ÐèÒª´óÁ¿µÄ¹Åµä·ç¸ñ»òÏÖ´ú·ç¸ñµÄǽ»òÎÝ×Ó£¬Õâʱ¿ÉÒÔͨ¹ý¿½±´Ò»¸öÒÑÓеÄÔÐͶÔÏóÀ´Éú³ÉжÔÏ󣬾ÍÊÇÒ»¸öÔÐÍģʽµÄÀý×ÓÁË¡£Í¨¹ý¿Ë¡À´½â¾ö¡°Ò×±ä¶ÔÏ󡱵Ĵ´½¨ÎÊÌâ¡£

ʾÀý´úÂ룺
using System;
public abstract class RoomPrototype
{
public abstract RoomPrototype Clone();
}
public class ModernPrototype:RoomPrototype
{
public override RoomPrototype Clone()
{
return (RoomPrototype)this.MemberwiseClone();
}
}
public class ClassicalPrototype:RoomPrototype
{
public override RoomPrototype Clone()
{
return (RoomPrototype)this.MemberwiseClone();
}
}
|
¾¿¾¹Ñ¡ÓÃÄÄÒ»ÖÖģʽ×îºÃÈ¡¾öÓںܶàµÄÒòËØ¡£Ê¹ÓÃAbstract Factory¡¢Prototype Pattern»òBuilder
PatternµÄÉè¼Æ±ÈʹÓÃFactory MethodµÄÉè¼Æ¸ü¼ÓÁé»î£¬µ«ÊÇÒ²¸ü¼Ó¸´ÔÓ£¬ÓÈÆäAbstract
FactoryÐèÒªÅÓ´óµÄ¹¤³§ÀàÀ´Ö§³Ö¡£Í¨³££¬Éè¼ÆÒÔʹÓÃFactory Method¿ªÊ¼£¬²¢ÇÒµ±Éè¼ÆÕß·¢ÏÖÐèÒª¸ü´óµÄÁé»îÐÔʱ£¬Éè¼Æ±ã»áÏòÆäËûÉè¼ÆÄ£Ê½ÑÝ»¯£¬µ±ÄãÔÚ¶à¸öÉè¼ÆÄ£Ê½Ö®¼ä½øÐÐȨºâµÄʱºò£¬Á˽â¶à¸öÉè¼ÆÄ£Ê½¿ÉÒÔ¸øÄãÌṩ¸ü¶àµÄÑ¡ÔñÓàµØ¡£
×ܽá
ʹÓô´½¨ÕßģʽÊÇΪÁËÌá¸ßϵͳµÄ¿Éά»¤ÐԺͿÉÀ©Õ¹ÐÔ£¬Ìá¸ßÓ¦¶ÔÐèÇó±ä»¯µÄÄÜÁ¦£¡
|