Éè¼ÆÄ£Ê½Ö®Bridge

2014-11-24 08:47:01 ¡¤ ×÷Õß: ¡¤ ä¯ÀÀ: 0

Bridge¶¨Òå :
½«³éÏóºÍÐÐΪ»®·Ö¿ªÀ´,¸÷×Ô¶ÀÁ¢,µ«Äܶ¯Ì¬µÄ½áºÏ.

ΪʲôʹÓÃ
ͨ³£,µ±Ò»¸ö³éÏóÀà»ò½Ó¿ÚÓжà¸ö¾ßÌåʵÏÖ(concrete subclass),ÕâЩconcreteÖ®¼ä¹ØÏµ¿ÉÄÜÓÐÒÔÏÂÁ½ÖÖ:
1. Õâ¶à¸ö¾ßÌåʵÏÖÖ®¼äÇ¡ºÃÊDz¢ÁеÄ,ÈçÇ°Ãæ¾ÙÀý,´ò×®,ÓÐÁ½¸öconcrete class:·½ÐÎ×®ºÍÔ²ÐÎ×®;ÕâÁ½¸öÐÎ×´ÉϵÄ×®ÊDz¢ÁеÄ,ûÓиÅÄîÉϵÄÖØ¸´,ÄÇôÎÒÃÇֻҪʹÓü̳оͿÉÒÔÁË.

2.ʵ¼ÊÓ¦ÓÃÉÏ,³£³£ÓпÉÄÜÔÚÕâ¶à¸öconcrete classÖ®¼äÓиÅÄîÉÏÖØµþ.ÄÇôÐèÒªÎÒÃǰѳéÏó¹²Í¬²¿·ÖºÍÐÐΪ¹²Í¬²¿·Ö¸÷×Ô¶ÀÁ¢¿ªÀ´,Ô­À´ÊÇ×¼±¸·ÅÔÚÒ»¸ö½Ó¿ÚÀï,ÏÖÔÚÐèÒªÉè¼ÆÁ½¸ö½Ó¿Ú,·Ö±ð·ÅÖóéÏóºÍÐÐΪ.

ÀýÈç,Ò»±­¿§·ÈΪÀý,ÓÐÖб­ºÍ´ó±­Ö®·Ö,ͬʱ»¹ÓмÓÄÌ ²»¼ÓÄÌÖ®·Ö. Èç¹ûÓõ¥´¿µÄ¼Ì³Ð,ÕâËĸö¾ßÌåʵÏÖ(Öб­ ´ó±­ ¼ÓÄÌ ²»¼ÓÄÌ)Ö®¼äÓиÅÄîÖØµþ,ÒòΪÓÐÖб­¼ÓÄÌ,Ò²ÓÐÖб­²»¼ÓÄÌ, Èç¹ûÔÙÔÚÖб­ÕâÒ»²ãÔÙʵÏÖÁ½¸ö¼Ì³Ð,ºÜÏÔÈ»»ìÂÒ,À©Õ¹ÐÔ¼«²î.ÄÇÎÒÃÇʹÓÃBridgeģʽÀ´ÊµÏÖËü.

ÈçºÎʵÏÖ
ÒÔÉÏÃæÌáµ½µÄ¿§·È ΪÀý. ÎÒÃÇÔ­À´´òËãÖ»Éè¼ÆÒ»¸ö½Ó¿Ú(³éÏóÀà),ʹÓÃBridgeģʽºó,ÎÒÃÇÐèÒª½«³éÏóºÍÐÐΪ·Ö¿ª,¼ÓÄ̺Ͳ»¼ÓÄÌÊôÓÚÐÐΪ,ÎÒÃǽ«ËüÃdzéÏó³ÉÒ»¸öרÃŵÄÐÐΪ½Ó¿Ú.

ÏÈ¿´¿´³éÏ󲿷ֵĽӿڴúÂë:

public abstract class Coffee
{
¡¡¡¡CoffeeImp coffeeImp;

¡¡¡¡public void setCoffeeImp() {
¡¡¡¡¡¡¡¡this.CoffeeImp = CoffeeImpSingleton.getTheCoffeImp();
¡¡¡¡}

¡¡¡¡public CoffeeImp getCoffeeImp() {return this.CoffeeImp;}

¡¡¡¡public abstract void pourCoffee();
}

ÆäÖÐCoffeeImp ÊǼӲ»¼ÓÄ̵ÄÐÐΪ½Ó¿Ú,¿´Æä´úÂëÈçÏÂ:

public abstract class CoffeeImp
{
¡¡¡¡public abstract void pourCoffeeImp();
}

ÏÖÔÚÎÒÃÇÓÐÁËÁ½¸ö³éÏóÀà,ÏÂÃæÎÒÃÇ·Ö±ð¶ÔÆä½øÐм̳Ð,ʵÏÖconcrete class:

//Öб­
public class MediumCoffee extends Coffee
{
¡¡¡¡public MediumCoffee() {setCoffeeImp();}

¡¡¡¡public void pourCoffee()
¡¡¡¡{
¡¡¡¡¡¡¡¡CoffeeImp coffeeImp = this.getCoffeeImp();
¡¡¡¡¡¡¡¡//ÎÒÃÇÒÔÖØ¸´´ÎÊýÀ´ËµÃ÷ÊdzåÖб­»¹ÊÇ´ó±­ ,ÖØ¸´2´ÎÊÇÖб­
¡¡¡¡¡¡¡¡for (int i = 0; i < 2; i++)
¡¡¡¡¡¡¡¡{

¡¡¡¡¡¡¡¡¡¡¡¡coffeeImp.pourCoffeeImp();
¡¡¡¡¡¡¡¡}
¡¡¡¡
¡¡¡¡}
}

//´ó±­
public class SuperSizeCoffee extends Coffee
{
¡¡¡¡public SuperSizeCoffee() {setCoffeeImp();}

¡¡¡¡public void pourCoffee()
¡¡¡¡{
¡¡¡¡¡¡¡¡CoffeeImp coffeeImp = this.getCoffeeImp();
¡¡¡¡¡¡¡¡//ÎÒÃÇÒÔÖØ¸´´ÎÊýÀ´ËµÃ÷ÊdzåÖб­»¹ÊÇ´ó±­ ,ÖØ¸´5´ÎÊÇ´ó±­
¡¡¡¡¡¡¡¡for (int i = 0; i < 5; i++)
¡¡¡¡¡¡¡¡{

¡¡¡¡¡¡¡¡¡¡¡¡coffeeImp.pourCoffeeImp();
¡¡¡¡¡¡¡¡}
¡¡¡¡
¡¡¡¡}
}

ÉÏÃæ·Ö±ðÊÇÖб­ºÍ´ó±­µÄ¾ßÌåʵÏÖ.ÏÂÃæÔÙ¶ÔÐÐΪCoffeeImp½øÐм̳Ð:

//¼ÓÄÌ
public class MilkCoffeeImp extends CoffeeImp
{
¡¡¡¡MilkCoffeeImp() {}

¡¡¡¡public void pourCoffeeImp()
¡¡¡¡{
¡¡¡¡¡¡¡¡System.out.println("¼ÓÁËÃÀζµÄÅ£ÄÌ");
¡¡¡¡}
}

//²»¼ÓÄÌ
public class FragrantCoffeeImp extends CoffeeImp
{
¡¡¡¡FragrantCoffeeImp() {}

¡¡¡¡public void pourCoffeeImp()
¡¡¡¡{
¡¡¡¡¡¡¡¡System.out.println("ʲôҲû¼Ó,ÇåÏã");
¡¡¡¡}
}

BridgeģʽµÄ»ù±¾¿ò¼ÜÎÒÃÇÒѾ­´îºÃÁË,±ðÍü¼Ç¶¨ÒåÖл¹ÓÐÒ»¾ä:¶¯Ì¬½áºÏ,ÎÒÃÇÏÖÔÚ¿ÉÒԺȵ½ÖÁÉÙËÄÖÖ¿§·È:
1.Öб­¼ÓÄÌ
2.Öб­²»¼ÓÄÌ
3.´ó±­¼ÓÄÌ
4.´ó±­²»¼ÓÄÌ

¿´¿´ÊÇÈçºÎ¶¯Ì¬½áºÏµÄ,ÔÚʹÓÃ֮ǰ,ÎÒÃÇ×ö¸ö×¼±¸¹¤×÷,Éè¼ÆÒ»¸öµ¥Ì¬Àà(Singleton)ÓÃÀ´holdµ±Ç°µÄCoffeeImp:

public class CoffeeImpSingleton
{
¡¡¡¡private static CoffeeImp coffeeImp;

¡¡¡¡public CoffeeImpSingleton(CoffeeImp coffeeImpIn)
¡¡¡¡ {this.coffeeImp = coffeeImpIn;}

¡¡¡¡public static CoffeeImp getTheCoffeeImp()
¡¡¡¡{
¡¡¡¡¡¡¡¡return coffeeImp;
¡¡¡¡}
}

¿´¿´Öб­¼ÓÄÌ ºÍ´ó±­¼ÓÄÌ ÊÇÔõô³öÀ´µÄ:

//ÄóöÅ£ÄÌ
CoffeeImpSingleton coffeeImpSingleton = new CoffeeImpSingleton(new MilkCoffeeImp());

//Öб­¼ÓÄÌ
MediumCoffee mediumCoffee = new MediumCoffee();
mediumCoffee.pourCoffee();

//´ó±­¼ÓÄÌ
SuperSizeCoffee superSizeCoffee = new SuperSizeCoffee();
superSizeCoffee.pourCoffee();

×¢Òâ: BridgeģʽµÄÖ´ÐÐÀàÈçCoffeeImpºÍCoffeeÊÇÒ»¶ÔÒ»µÄ¹ØÏµ, ÕýÈ·´´½¨CoffeeImpÊǸÃģʽµÄ¹Ø¼ü,

BridgeģʽÔÚEJBÖеÄÓ¦ÓÃ
EJBÖÐÓÐÒ»¸öData Access Object (DAO)ģʽ,ÕâÊǽ«ÉÌÒµÂß¼­ºÍ¾ßÌåÊý¾Ý×ÊÔ´·Ö¿ªµÄ,ÒòΪ²»Í¬µÄÊý¾Ý¿âÓв»Í¬µÄÊý¾Ý¿â²Ù×÷.½«²Ù×÷²»Í¬Êý¾Ý¿âµÄÐÐΪ¶ÀÁ¢³éÏó³ÉÒ»¸öÐÐΪ½Ó¿ÚDAO.ÈçÏÂ:

1.Business Object (ÀàËÆCoffee)

ʵÏÖһЩ³éÏóµÄÉÌÒµ²Ù×÷:ÈçѰÕÒÒ»¸öÓû§ÏÂËùÓеĶ©µ¥

Éæ¼°Êý¾Ý¿â²Ù×÷¶¼Ê¹ÓÃDAOImplementbor.

2.Data Access Object (ÀàËÆCoffeeImp)

һЩ³éÏóµÄ¶ÔÊý¾Ý¿â×ÊÔ´²Ù×÷ www.2cto.com
3.DAOImplementor ÈçOrderDAOCS, OrderDAOOracle, OrderDAOSybase(ÀàËÆMilkCoffeeImp FragrantCoffeeImp)

¾ßÌåµÄÊý¾Ý¿â²Ù×÷,Èç"INSERT INTO "µÈÓï¾ä,OrderDAOOracleÊÇOracle OrderDAOSybaseÊÇSybaseÊý¾Ý¿â.

4.Êý¾Ý¿â (Cloudscape, Oracle, or Sybase database via JDBC API)


×÷Õߣºtbwshc