¹¤³§·½·¨Ä£Ê½ÊÇÀàµÄ´´½¨Ä£Ê½£¬ÓÖ½Ð×öÐéÄâ¹¹Ôì×Ó(Virtual Constructor)ģʽ»òÕß¶à̬ÐÔ¹¤³§£¨Polymorphic Factory£©Ä£Ê½¡£
¡¡¡¡¹¤³§·½·¨Ä£Ê½µÄÓÃÒâÊǶ¨ÒåÒ»¸ö´´½¨²úÆ·¶ÔÏóµÄ¹¤³§½Ó¿Ú£¬½«Êµ¼Ê´´½¨¹¤×÷ÍÆ³Ùµ½×ÓÀàÖС£
ÄÇô¹¤³§·½·¨Ä£Ê½ÊÇÔÚʲô³¡¾°ÏÂʹÓÃÄØ£¬ÏÂÃæ¾ÍÒÔ±¾È˵ÄÀí½â¾ÙÀý˵Ã÷:
¡¡¡¡ÏàÐźܶàÈ˶¼×ö¹ýµ¼Èëµ¼³ö¹¦ÄÜ£¬¾ÍÄõ¼³ö¹¦ÄÜÀ´Ëµ¡£ÓÐÕâôһ¸öÐèÇó£ºXXϵͳÐèÒªÖ§³Ö¶ÔÊý¾Ý¿âÖеÄÔ±¹¤Ð½×ʽøÐе¼³ö£¬²¢ÇÒÖ§³Ö¶àÖÖ¸ñʽÈ磺HTML¡¢CSV¡¢PDFµÈ£¬Ã¿ÖÖ¸ñʽµ¼³öµÄ½á¹¹ÓÐËù²»Í¬£¬±ÈÈ磺²ÆÎñ¸úÆäËûÈ˶Ե¼³öн×ʵÄHTML¸ñʽҪÇó¿ÉÄܻ᲻һÑù£¬ÒòΪ²ÆÎñ¿ÉÄÜÐèÒªÌØ¶¨µÄ¸ñʽ·½±ãºËËã»òÆäËûÓÃ;¡£
¡¡¡¡Èç¹ûʹÓüòµ¥¹¤³§Ä£Ê½£¬Ôò¹¤³§Àà±Ø¶¨¹ýÓÚÓ·Öס£ÒòΪ¼òµ¥¹¤³§Ä£Ê½Ö»ÓÐÒ»¸ö¹¤³§À࣬ËüÐèÒª´¦ÀíËùÓеĴ´½¨µÄÂß¼¡£¼ÙÈçÒÔÉÏÐèÇóÔÝʱֻ֧³Ö3ÖÖµ¼³öµÄ¸ñʽÒÔ¼°2ÖÖµ¼³öµÄ½á¹¹£¬Äǹ¤³§ÀàÔòÐèÒª6¸öif elseÀ´´´½¨6ÖÖ²»Í¬µÄÀàÐÍ¡£Èç¹ûÈÕºóÐèÇó²»¶ÏÔö¼Ó£¬Ôòºó¹û²»¿°ÉèÏë¡£
¡¡¡¡Õâʱºò¾ÍÐèÒª¹¤³§·½·¨Ä£Ê½À´´¦ÀíÒÔÉÏÐèÇó¡£ÔÚ¹¤³§·½·¨Ä£Ê½ÖУ¬ºËÐĵŤ³§À಻ÔÙ¸ºÔðËùÓеĶÔÏóµÄ´´½¨£¬¶øÊǽ«¾ßÌå´´½¨µÄ¹¤×÷½»¸ø×ÓÀàÈ¥×ö¡£Õâ¸öºËÐÄÀàÔòÒ¡ÉíÒ»±ä£¬³ÉΪÁËÒ»¸ö³éÏ󹤳§½ÇÉ«£¬½ö¸ºÔð¸ø³ö¾ßÌ幤³§×ÓÀà±ØÐëʵÏֵĽӿڣ¬¶ø²»½Ó´¥ÄÄÒ»¸öÀàÓ¦µ±±»ÊµÀý»¯ÕâÖÖϸ½Ú¡£
¡¡¡¡ÕâÖÖ½øÒ»²½³éÏ󻯵Ľá¹û£¬Ê¹ÕâÖÖ¹¤³§·½·¨Ä£Ê½¿ÉÒÔÓÃÀ´ÔÊÐíϵͳÔÚ²»Ð޸ľßÌ幤³§½ÇÉ«µÄÇé¿öÏÂÒý½øÐµIJúÆ·£¬ÕâÒ»ÌØµãÎÞÒÉʹµÃ¹¤³§·½·¨Ä£Ê½¾ßÓг¬¹ý¼òµ¥¹¤³§Ä£Ê½µÄÓÅÔ½ÐÔ¡£ÏÂÃæ¾ÍÕë¶ÔÒÔÉÏÐèÇóÉè¼ÆUMLͼ£º

´ÓÉÏͼ¿ÉÒÔ¿´³ö£¬Õâ¸öʹÓõŤ³§·½·¨Ä£Ê½µÄÏµÍ³Éæ¼°µ½ÒÔϽÇÉ«£º
¡¡¡¡³éÏ󹤳§£¨ExportFactory£©½ÇÉ«£ºµ£ÈÎÕâ¸ö½ÇÉ«µÄÊǹ¤³§·½·¨Ä£Ê½µÄºËÐÄ£¬ÈκÎÔÚģʽÖд´½¨¶ÔÏóµÄ¹¤³§Àà±ØÐëʵÏÖÕâ¸ö½Ó¿Ú¡£ÔÚʵ¼ÊµÄϵͳÖУ¬Õâ¸ö½ÇɫҲ³£³£Ê¹ÓóéÏóÀàʵÏÖ¡£
¡¡¡¡¾ßÌ幤³§£¨ExportHtmlFactory¡¢ExportPdfFactory£©½ÇÉ«£ºµ£ÈÎÕâ¸ö½ÇÉ«µÄÊÇʵÏÖÁ˳éÏ󹤳§½Ó¿ÚµÄ¾ßÌåJAVAÀà¡£¾ßÌ幤³§½ÇÉ«º¬ÓÐÓëÒµÎñÃÜÇÐÏà¹ØµÄÂß¼£¬²¢ÇÒÊܵ½Ê¹ÓÃÕߵĵ÷ÓÃÒÔ´´½¨µ¼³öÀࣨÈ磺ExportStandardHtmlFile£©¡£
¡¡¡¡³éÏóµ¼³ö£¨ExportFile£©½ÇÉ«£º¹¤³§·½·¨Ä£Ê½Ëù´´½¨µÄ¶ÔÏóµÄ³¬À࣬Ҳ¾ÍÊÇËùÓе¼³öÀàµÄ¹²Í¬¸¸Àà»ò¹²Í¬ÓµÓеĽӿڡ£ÔÚʵ¼ÊµÄϵͳÖУ¬Õâ¸ö½ÇɫҲ³£³£Ê¹ÓóéÏóÀàʵÏÖ¡£
¡¡¡¡¾ßÌåµ¼³ö£¨ExportStandardHtmlFileµÈ£©½ÇÉ«£ºÕâ¸ö½ÇɫʵÏÖÁ˳éÏóµ¼³ö£¨ExportFile£©½ÇÉ«ËùÉùÃ÷µÄ½Ó¿Ú£¬¹¤³§·½·¨Ä£Ê½Ëù´´½¨µÄÿһ¸ö¶ÔÏó¶¼ÊÇij¸ö¾ßÌåµ¼³ö½ÇÉ«µÄʵÀý¡£
Ô´´úÂë
¡¡¡¡Ê×ÏÈÊdzéÏ󹤳§½ÇɫԴ´úÂë¡£ËüÉùÃ÷ÁËÒ»¸ö¹¤³§·½·¨£¬ÒªÇóËùÓеľßÌ幤³§½ÇÉ«¶¼ÊµÏÖÕâ¸ö¹¤³§·½·¨¡£²ÎÊýtype±íʾµ¼³öµÄ¸ñʽÊÇÄÄÒ»Öֽṹ£¬È磺µ¼³öHTML¸ñʽÓÐÁ½Öֽṹ£¬Ò»ÖÖÊDZê×¼½á¹¹£¬Ò»ÖÖÊDzÆÎñÐèÒªµÄ½á¹¹
[java]
package com.bankht.factoryMethod;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-6-19 ÏÂÎç02:53:10
*
* @Àà˵Ã÷ £º³éÏ󹤳§½ÇÉ«
*/
public interface ExportFactory {
public ExportFile factory(String type);
}
package com.bankht.factoryMethod;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-6-19 ÏÂÎç02:53:10
*
* @Àà˵Ã÷ £º³éÏ󹤳§½ÇÉ«
*/
public interface ExportFactory {
public ExportFile factory(String type);
}
¾ßÌ幤³§½ÇÉ«ÀàÔ´´úÂ룺
[java]
package com.bankht.factoryMethod;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-6-19 ÏÂÎç02:54:54
*
* @Àà˵Ã÷ £º¾ßÌ幤³§½ÇÉ«Àà
*/
public class ExportHtmlFactory implements ExportFactory {
@Override
public ExportFile factory(String type) {
// TODO Auto-generated method stub
if ("standard".equals(type)) {
return new ExportStandardHtmlFile();
} else if ("financial".equals(type)) {
return new ExportFinancialHtmlFile();
} else {
throw new RuntimeException("ûÓÐÕÒµ½¶ÔÏó");
}
}
}
package com.bankht.factoryMethod;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-6-19 ÏÂÎç02:54:54
*
* @Àà˵Ã÷ £º¾ßÌ幤³§½ÇÉ«Àà
*/
public class ExportHtmlFactory implements ExportFactory {
@Override
public ExportFile factory(String type) {
// TODO Auto-generated method stub
if ("standard".equals(type)) {
return new ExportStandardHtmlFile();
} else if ("financial".equals(type)) {
return new ExportFinancialHtmlFile();
} else {
throw new RuntimeException("ûÓÐÕÒµ½¶ÔÏó");
}
}
}
[java]
package com.bankht.factoryMethod;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-6-19 ÏÂÎç02:55:04
*
* @Àà˵Ã÷ £º¾ßÌ幤³§½ÇÉ«Àà
*/
public class ExportPdfFactory implements ExportFactory {
@Override
public ExportFile factory(String type) {
if ("standard".equals(type)) {
return new ExportStandardHtmlFile();
} else if ("financial".equals(type)) {
return new ExportFinancialHtmlFile();
} else {
throw new RuntimeException("ûÓÐÕÒµ½¶ÔÏó");
}
}
}
package com.bankht.factoryMethod;
/**
* @author: ÌØÖÖ