¡¶JAVAÓëģʽ¡·µÚ5Ìì¨D½¨Ôìģʽ (Ò»)

2014-11-24 08:22:23 ¡¤ ×÷Õß: ¡¤ ä¯ÀÀ: 2

¡¡½¨ÔìģʽÊǶÔÏóµÄ´´½¨Ä£Ê½¡£½¨Ôìģʽ¿ÉÒÔ½«Ò»¸ö²úÆ·µÄÄÚ²¿±íÏó£¨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