¡¡½¨ÔìģʽÊǶÔÏóµÄ´´½¨Ä£Ê½¡£½¨Ôìģʽ¿ÉÒÔ½«Ò»¸ö²úÆ·µÄÄÚ²¿±íÏó£¨internal representation£©Óë²úÆ·µÄÉú²ú¹ý³Ì·Ö¸î¿ªÀ´£¬´Ó¶ø¿ÉÒÔʹһ¸ö½¨Ôì¹ý³ÌÉú³É¾ßÓв»Í¬µÄÄÚ²¿±íÏóµÄ²úÆ·¶ÔÏó¡£
--------------------------------------------------------------------------------
²úÆ·µÄÄÚ²¿±íÏó
¡¡¡¡Ò»¸ö²úÆ·³£Óв»Í¬µÄ×é³É³É·Ö×÷Ϊ²úÆ·µÄÁã¼þ£¬ÕâЩÁã¼þÓпÉÄÜÊǶÔÏó£¬Ò²ÓпÉÄܲ»ÊǶÔÏó£¬ËüÃÇͨ³£ÓÖ½Ð×ö²úÆ·µÄÄÚ²¿±íÏó£¨internal representation£©¡£²»Í¬µÄ²úÆ·¿ÉÒÔÓв»Í¬µÄÄÚ²¿±íÏó£¬Ò²¾ÍÊDz»Í¬µÄÁã¼þ¡£Ê¹Óý¨Ôìģʽ¿ÉÒÔʹ¿Í»§¶Ë²»ÐèÒªÖªµÀËùÉú³ÉµÄ²úÆ·ÓÐÄÄЩÁã¼þ£¬Ã¿¸ö²úÆ·µÄ¶ÔÓ¦Áã¼þ±Ë´ËÓкβ»Í¬£¬ÊÇÔõô½¨Ôì³öÀ´µÄ£¬ÒÔ¼°Ôõô×é³É²úÆ·¡£
¶ÔÏóÐÔÖʵĽ¨Ôì
¡¡¡¡ÓÐЩÇé¿öÏ£¬Ò»¸ö¶ÔÏó»áÓÐÒ»Ð©ÖØÒªµÄÐÔÖÊ£¬ÔÚËüÃÇûÓÐÇ¡µ±µÄֵ֮ǰ£¬¶ÔÏó²»ÄÜ×÷Ϊһ¸öÍêÕûµÄ²úƷʹÓᣱÈÈ磬һ¸öµç×ÓÓʼþÓз¢¼þÈ˵ØÖ·¡¢ÊÕ¼þÈ˵ØÖ·¡¢Ö÷Ìâ¡¢ÄÚÈÝ¡¢¸½Â¼µÈ²¿·Ö£¬¶øÔÚ×îÆðÂëµÄÊÕ¼þÈ˵ØÖ·µÃµ½¸³ÖµÖ®Ç°£¬Õâ¸öµç×ÓÓʼþ²»ÄÜ·¢ËÍ¡£
¡¡¡¡ÓÐЩÇé¿öÏ£¬Ò»¸ö¶ÔÏóµÄһЩÐÔÖʱØÐë°´ÕÕij¸ö˳Ðò¸³Öµ²ÅÓÐÒâÒå¡£ÔÚij¸öÐÔÖÊûÓи³ÖµÖ®Ç°£¬ÁíÒ»¸öÐÔÖÊÔòÎÞ·¨¸³Öµ¡£ÕâЩÇé¿öʹµÃÐÔÖʱ¾ÉíµÄ½¨ÔìÉæ¼°µ½¸´ÔÓµÄÉÌÒµÂß¼¡£Õâʱºò£¬´Ë¶ÔÏóÏ൱ÓÚÒ»¸öÓдý½¨ÔìµÄ²úÆ·£¬¶ø¶ÔÏóµÄÕâЩÐÔÖÊÏ൱ÓÚ²úÆ·µÄÁã¼þ£¬½¨Ôì²úÆ·µÄ¹ý³ÌÊǽ¨ÔìÁã¼þµÄ¹ý³Ì¡£ÓÉÓÚ½¨ÔìÁã¼þµÄ¹ý³ÌºÜ¸´ÔÓ£¬Òò´Ë£¬ÕâЩÁã¼þµÄ½¨Ôì¹ý³ÌÍùÍù±»¡°Íⲿ»¯¡±µ½ÁíÒ»¸ö³Æ×ö½¨ÔìÕߵĶÔÏóÀ½¨ÔìÕß¶ÔÏó·µ»¹¸ø¿Í»§¶ËµÄÊÇÒ»¸öÈ«²¿Áã¼þ¶¼½¨ÔìÍê±ÏµÄ²úÆ·¶ÔÏó¡£
¡¡¡¡½¨ÔìģʽÀûÓÃÒ»¸öµ¼ÑÝÕß¶ÔÏóºÍ¾ßÌ彨ÔìÕß¶ÔÏóÒ»¸ö¸öµØ½¨Ôì³öËùÓеÄÁã¼þ£¬´Ó¶ø½¨Ôì³öÍêÕûµÄ²úÆ·¶ÔÏó¡£½¨ÔìÕßģʽ½«²úÆ·µÄ½á¹¹ºÍ²úÆ·µÄÁã¼þµÄ½¨Ôì¹ý³Ì¶Ô¿Í»§¶ËÒþ²ØÆðÀ´£¬°Ñ¶Ô½¨Ôì¹ý³Ì½øÐÐÖ¸»ÓµÄÔðÈκ;ßÌ彨ÔìÕßÁã¼þµÄÔðÈηָÀ´£¬´ïµ½ÔðÈλ®·ÖºÍ·â×°µÄÄ¿µÄ¡£¡¡

½¨ÔìģʽµÄ½á¹¹
¡¡¡¡ÔÚÕâ¸öʾÒâÐÔµÄϵͳÀ×îÖÕ²úÆ·ProductÖ»ÓÐÁ½¸öÁã¼þ£¬¼´part1ºÍpart2¡£ÏàÓ¦µÄ½¨Ôì·½·¨Ò²ÓÐÁ½¸ö£ºbuildPart1()ºÍbuildPart2()¡¢Í¬Ê±¿ÉÒÔ¿´³ö±¾Ä£Ê½Éæ¼°µ½Ëĸö½ÇÉ«£¬ËüÃÇ·Ö±ðÊÇ£º
¡¡¡¡³éÏó½¨ÔìÕߣ¨Builder£©½ÇÉ«£º¸ø ³öÒ»¸ö³éÏó½Ó¿Ú£¬ÒԹ淶²úÆ·¶ÔÏóµÄ¸÷¸ö×é³É³É·ÖµÄ½¨Ôì¡£Ò»°ã¶øÑÔ£¬´Ë½Ó¿Ú¶ÀÁ¢ÓÚÓ¦ÓóÌÐòµÄÉÌÒµÂß¼¡£Ä£Ê½ÖÐÖ±½Ó´´½¨²úÆ·¶ÔÏóµÄÊǾßÌ彨ÔìÕß (ConcreteBuilder)½ÇÉ«¡£¾ßÌ彨ÔìÕßÀà±ØÐëʵÏÖÕâ¸ö½Ó¿ÚËùÒªÇóµÄÁ½ÖÖ·½·¨£ºÒ»ÖÖÊǽ¨Ôì·½·¨(buildPart1ºÍ buildPart2)£¬ÁíÒ»ÖÖÊÇ·µ»¹½á¹¹·½·¨(retrieveResult)¡£Ò»°ãÀ´Ëµ£¬²úÆ·Ëù°üº¬µÄÁã¼þÊýÄ¿Ó뽨Ôì·½·¨µÄÊýÄ¿Ïà·û¡£»»ÑÔÖ®£¬ÓжàÉÙ Áã¼þ£¬¾ÍÓжàÉÙÏàÓ¦µÄ½¨Ôì·½·¨¡£
¡¡¡¡¾ßÌ彨ÔìÕߣ¨ConcreteBuilder£©½ÇÉ«£ºµ£ÈÎÕâ¸ö½ÇÉ«µÄÊÇÓëÓ¦ÓóÌÐò½ôÃÜÏà¹ØµÄһЩÀ࣬ËüÃÇÔÚÓ¦ÓóÌÐòµ÷ÓÃÏ´´½¨²úÆ·µÄʵÀý¡£Õâ¸ö½ÇɫҪÍê³ÉµÄÈÎÎñ°üÀ¨£º1.ʵÏÖ³éÏó½¨ÔìÕßBuilderËùÉùÃ÷µÄ½Ó¿Ú£¬¸ø³öÒ»²½Ò»²½µØÍê³É´´½¨²úƷʵÀýµÄ²Ù×÷¡£2.ÔÚ½¨Ôì¹ý³ÌÍê³Éºó£¬Ìṩ²úÆ·µÄʵÀý¡£
¡¡¡¡µ¼ÑÝÕߣ¨Director£©½ÇÉ«£ºµ£ÈÎÕâ¸ö½ÇÉ«µÄÀàµ÷ÓþßÌ彨ÔìÕß½ÇÉ«ÒÔ´´½¨²úÆ·¶ÔÏó¡£Ó¦µ±Ö¸³öµÄÊÇ£¬µ¼ÑÝÕß½ÇÉ«²¢Ã»ÓвúÆ·ÀàµÄ¾ßÌå֪ʶ£¬ÕæÕýÓµÓвúÆ·ÀàµÄ¾ßÌå֪ʶµÄÊǾßÌ彨ÔìÕß½ÇÉ«¡£
¡¡¡¡²úÆ·£¨Product£©½ÇÉ«£º²úÆ·±ãÊǽ¨ÔìÖеĸ´ÔÓ¶ÔÏó¡£Ò»°ãÀ´Ëµ£¬Ò»¸öϵͳÖлáÓжàÓÚÒ»¸öµÄ²úÆ·À࣬¶øÇÒÕâЩ²úÆ·Àಢ²»Ò»¶¨Óй²Í¬µÄ½Ó¿Ú£¬¶øÍêÈ«¿ÉÒÔÊDz»Ïà¹ØÁªµÄ¡£
¡¡¡¡
¡¡¡¡µ¼ÑÝÕß½ÇÉ«ÊÇÓë¿Í»§¶Ë´ò½»µÀµÄ½ÇÉ«¡£µ¼ÑÝÕß½«¿Í»§¶Ë´´½¨²úÆ·µÄÇëÇó»®·ÖΪ¶Ô¸÷¸öÁã¼þµÄ½¨ÔìÇëÇó£¬ÔÙ½«ÕâЩÇëÇóίÅɸø¾ßÌ彨ÔìÕß½ÇÉ«¡£¾ßÌ彨ÔìÕß½ÇÉ«ÊÇ×ö¾ßÌ彨Ô칤×÷µÄ£¬µ«ÊÇÈ´²»Îª¿Í»§¶ËËùÖª¡£
¡¡¡¡Ò»°ãÀ´Ëµ£¬Ã¿ÓÐÒ»¸ö²úÆ·À࣬¾ÍÓÐÒ»¸öÏàÓ¦µÄ¾ßÌ彨ÔìÕßÀà¡£ÕâЩ²úÆ·Ó¦µ±ÓÐÒ»ÑùÊýÄ¿µÄÁã¼þ£¬¶øÃ¿ÓÐÒ»¸öÁã¼þ¾ÍÏàÓ¦µØÔÚËùÓеĽ¨ÔìÕß½ÇÉ«ÀïÓÐÒ»¸ö½¨Ôì·½·¨¡£
Ô´´úÂë
¡¡²úÆ·ÀàProduct
[java]
package com.bankht.Builder;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-6-25 ÉÏÎç10:08:32
*
* @Àà˵Ã÷ £º
*/
public class Product {
/**
* ¶¨ÒåһЩ¹ØÓÚ²úÆ·µÄ²Ù×÷
*/
private String part1;
private String part2;
public String getPart1() {
return part1;
}
public void setPart1(String part1) {
this.part1 = part1;
}
public String getPart2() {
return part2;
}
public void setPart2(String part2) {
this.part2 = part2;
}
}
package com.bankht.Builder;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-6-25 ÉÏÎç10:08:32
*
* @Àà˵Ã÷ £º
*/
public class Product {
/**
* ¶¨ÒåһЩ¹ØÓÚ²úÆ·µÄ²Ù×÷
*/
private String part1;
private String part2;
public String getPart1() {
return part1;
}
public void setPart1(String part1) {
this.part1 = part1;
}
public String getPart2() {
return part2;
}
public void setPart2(String part2) {
this.part2 = part2;
}
}
¡¡³éÏó½¨ÔìÕßÀàBuilder
[java]
package com.bankht.Builder;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-6-25 ÉÏÎç10:09:13
*
* @Àà˵Ã÷ £º³éÏó½¨ÔìÕßÀàBuilder
*/
public interface Builder {
public void buildPart1();
public void buildPart2();
public Product retrieveResult();
}
package com.bankht.Builder;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-6-25 ÉÏÎç10:09:13
*
* @Àà˵Ã÷ £º³éÏó½¨ÔìÕßÀàBuilder
*/
public interface Builder {
public void buildPart1();
public void buildPart2();
public Product retrieveResult();
}
¾ßÌ彨ÔìÕßÀàConcreteBuilder
[java]
package com.bankht.Builder;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-6-25 ÉÏÎç10:09:33
*
* @Àà˵Ã÷ £º¾ßÌ彨ÔìÕßÀàConcr