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