¡¶JAVAÓëģʽ¡·µÚ19Ìì¨Dµü´ú×Óģʽ (Ò»)

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

µü´ú×ÓģʽÓÖ½ÐÓαê(Cursor)ģʽ£¬ÊǶÔÏóµÄÐÐΪģʽ¡£µü´ú×Óģʽ¿ÉÒÔ˳ÐòµØ·ÃÎÊÒ»¸ö¾Û¼¯ÖеÄÔªËØ¶ø²»±Ø±©Â¶¾Û¼¯µÄÄÚ²¿±íÏó£¨internal representation£©¡£


--------------------------------------------------------------------------------

¾Û¼¯ºÍJAVA¾Û¼¯

¡¡¡¡¶à¸ö¶ÔÏó¾ÛÔÚÒ»ÆðÐγɵÄ×ÜÌå³ÆÖ®Îª¾Û¼¯(Aggregate)£¬¾Û¼¯¶ÔÏóÊÇÄܹ»°üÈÝÒ»×é¶ÔÏóµÄÈÝÆ÷¶ÔÏó¡£¾Û¼¯ÒÀÀµÓÚ¾Û¼¯½á¹¹µÄ³éÏ󻯣¬¾ßÓи´ÔÓ»¯ºÍ¶àÑùÐÔ¡£Êý×é¾ÍÊÇ×î»ù±¾µÄ¾Û¼¯£¬Ò²ÊÇÆäËûµÄJAVA¾Û¼¯¶ÔÏóµÄÉè¼Æ»ù´¡¡£

¡¡¡¡JAVA¾Û¼¯¶ÔÏóÊÇʵÏÖÁ˹²Í¬µÄjava.util.Collection½Ó¿ÚµÄ¶ÔÏó£¬ÊÇJAVAÓïÑÔ¶Ô¾Û¼¯¸ÅÄîµÄÖ±½ÓÖ§³Ö¡£´Ó1.2°æ¿ªÊ¼£¬JAVAÓïÑÔÌṩÁ˺ܶàÖÖ¾Û¼¯£¬°üÀ¨Vector¡¢ArrayList¡¢HashSet¡¢HashMap¡¢HashtableµÈ£¬ÕâЩ¶¼ÊÇJAVA¾Û¼¯µÄÀý×Ó¡£

µü´ú×ÓģʽµÄ½á¹¹
¡¡¡¡µü´ú×ÓģʽÓÐÁ½ÖÖʵÏÖ·½Ê½£¬·Ö±ðÊǰ×Ïä¾Û¼¯ÓëÍâÙ÷µü´ú×ӺͺÚÏä¾Û¼¯ÓÚÄÚÙ÷µü´ú×Ó¡£

°×Ïä¾Û¼¯ÓëÍâÙ÷µü´ú×Ó
¡¡¡¡Èç¹ûÒ»¸ö¾Û¼¯µÄ½Ó¿ÚÌṩÁË¿ÉÒÔÓÃÀ´Ð޸ľۼ¯ÔªËصķ½·¨£¬Õâ¸ö½Ó¿Ú¾ÍÊÇËùνµÄ¿í½Ó¿Ú¡£

¡¡¡¡Èç¹û¾Û¼¯¶ÔÏóΪËùÓжÔÏóÌṩͬһ¸ö½Ó¿Ú£¬Ò²¾ÍÊÇ¿í½Ó¿ÚµÄ»°£¬µ±È»»áÂú×ãµü´ú×Óģʽ¶Ôµü´ú×Ó¶ÔÏóµÄÒªÇó¡£µ«ÊÇ£¬ÕâÑù»áÆÆ»µ¶Ô¾Û¼¯¶ÔÏóµÄ·â×°¡£ÕâÖÖÌṩ¿í½Ó¿ÚµÄ¾Û¼¯½Ð×ö°×Ïä¾Û¼¯¡£¾Û¼¯¶ÔÏóÏòÍâ½çÌṩͬÑùµÄ¿í½Ó¿Ú£¬ÈçÏÂͼËùʾ£º

\

¡¡¡¡ÓÉÓÚ¾Û¼¯×Ô¼ºÊµÏÖµü´úÂß¼­£¬²¢ÏòÍⲿÌṩÊʵ±µÄ½Ó¿Ú£¬Ê¹µÃµü´ú×Ó¿ÉÒÔ´ÓÍⲿ¿ØÖƾۼ¯ÔªËصĵü´ú¹ý³Ì¡£ÕâÑùÒ»À´µü´ú×ÓËù¿ØÖƵĽö½öÊÇÒ»¸öÓÎ±ê¶øÒÑ£¬ÕâÖÖµü´ú×Ó½Ð×öÓαêµü´ú×Ó£¨Cursor Iterator£©¡£ÓÉÓÚµü´ú×ÓÊÇÔÚ¾Û¼¯½á¹¹Ö®ÍâµÄ£¬Òò´ËÕâÑùµÄµü´ú×ÓÓÖ½Ð×öÍâÙ÷µü´ú×Ó£¨Extrinsic Iterator£©¡£

¡¡¡¡ÏÖÔÚ¿´Ò»¿´°×Ïä¾Û¼¯ÓëÍâÙ÷µü´ú×ÓµÄʵÏÖ¡£Ò»¸ö°×Ïä¾Û¼¯ÏòÍâ½çÌṩ·ÃÎÊ×Ô¼ºÄÚ²¿ÔªËصĽӿڣ¨³Æ×÷±éÀú·½·¨»òÕßTraversing Method£©£¬´Ó¶øÊ¹ÍâÙ÷µü´ú×Ó¿ÉÒÔͨ¹ý¾Û¼¯µÄ±éÀú·½·¨ÊµÏÖµü´ú¹¦ÄÜ¡£

¡¡¡¡ÒòΪµü´úµÄÂß¼­ÊÇÓɾۼ¯¶ÔÏó±¾ÉíÌṩµÄ£¬ËùÒÔÕâÑùµÄÍâÙ÷µü´ú×Ó½ÇÉ«ÍùÍù½ö½ö±£³Öµü´úµÄÓαêλÖá£

¡¡¡¡Ò»¸öµäÐ͵ÄÓɰ×Ïä¾Û¼¯ÓëÍâÙ÷µü´ú×Ó×é³ÉµÄϵͳÈçÏÂͼËùʾ£¬ÔÚÕâ¸öʵÏÖÖоßÌåµü´ú×Ó½ÇÉ«ÊÇÒ»¸öÍⲿÀ࣬¶ø¾ßÌå¾Û¼¯½ÇÉ«ÏòÍâ½çÌṩ±éÀú¾Û¼¯ÔªËصĽӿڡ£

\

µü´ú×ÓÄ£Ê½Éæ¼°µ½ÒÔϼ¸¸ö½ÇÉ«£º

¡¡¡¡¡ñ¡¡¡¡³éÏóµü´ú×Ó(Iterator)½ÇÉ«£º´Ë³éÏó½ÇÉ«¶¨Òå³ö±éÀúÔªËØËùÐèµÄ½Ó¿Ú¡£

¡¡¡¡¡ñ¡¡¡¡¾ßÌåµü´ú×Ó(ConcreteIterator)½ÇÉ«£º´Ë½ÇɫʵÏÖÁËIterator½Ó¿Ú£¬²¢±£³Öµü´ú¹ý³ÌÖеÄÓαêλÖá£

¡¡¡¡¡ñ¡¡¡¡¾Û¼¯(Aggregate)½ÇÉ«£º´Ë³éÏó½ÇÉ«¸ø³ö´´½¨µü´ú×Ó(Iterator)¶ÔÏóµÄ½Ó¿Ú¡£

¡¡¡¡¡ñ¡¡¡¡¾ßÌå¾Û¼¯(ConcreteAggregate)½ÇÉ«£ºÊµÏÖÁË´´½¨µü´ú×Ó(Iterator)¶ÔÏóµÄ½Ó¿Ú£¬·µ»ØÒ»¸öºÏÊʵľßÌåµü´ú×ÓʵÀý¡£

¡¡¡¡¡ñ¡¡¡¡¿Í»§¶Ë(Client)½ÇÉ«£º³ÖÓжԾۼ¯¼°Æäµü´ú×Ó¶ÔÏóµÄÒýÓ㬵÷Óõü´ú×Ó¶ÔÏóµÄµü´ú½Ó¿Ú£¬Ò²ÓпÉÄÜͨ¹ýµü´ú×Ó²Ù×÷¾Û¼¯ÔªËصÄÔö¼ÓºÍɾ³ý¡£

Ô´´úÂë
¡¡¡¡³éÏó¾Û¼¯½ÇÉ«À࣬Õâ¸ö½ÇÉ«¹æ¶¨³öËùÓеľßÌå¾Û¼¯±ØÐëʵÏֵĽӿڡ£µü´ú×ÓģʽҪÇó¾Û¼¯¶ÔÏó±ØÐëÓÐÒ»¸ö¹¤³§·½·¨£¬Ò²¾ÍÊÇcreateIterator()·½·¨£¬ÒÔÏòÍâ½çÌṩµü´ú×Ó¶ÔÏóµÄʵÀý¡£

[java]
package com.bankht.Iterator;

/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-6-29 ÉÏÎç11:01:00
*
* @Àà˵Ã÷ £º
* ³éÏó¾Û¼¯½ÇÉ«À࣬Õâ¸ö½ÇÉ«¹æ¶¨³öËùÓеľßÌå¾Û¼¯±ØÐëʵÏֵĽӿڡ£µü´ú×ÓģʽҪÇó¾Û¼¯¶ÔÏó±ØÐëÓÐÒ»¸ö¹¤³§·½·¨£¬
* Ò²¾ÍÊÇcreateIterator()·½·¨ £¬ÒÔÏòÍâ½çÌṩµü´ú×Ó¶ÔÏóµÄʵÀý¡£
*/
public abstract class Aggregate {
/**
* ¹¤³§·½·¨£¬´´½¨ÏàÓ¦µü´ú×Ó¶ÔÏóµÄ½Ó¿Ú
*/
public abstract Iterator createIterator();
}
package com.bankht.Iterator;

/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-6-29 ÉÏÎç11:01:00
*
* @Àà˵Ã÷ £º
* ³éÏó¾Û¼¯½ÇÉ«À࣬Õâ¸ö½ÇÉ«¹æ¶¨³öËùÓеľßÌå¾Û¼¯±ØÐëʵÏֵĽӿڡ£µü´ú×ÓģʽҪÇó¾Û¼¯¶ÔÏó±ØÐëÓÐÒ»¸ö¹¤³§·½·¨£¬
* Ò²¾ÍÊÇcreateIterator()·½·¨ £¬ÒÔÏòÍâ½çÌṩµü´ú×Ó¶ÔÏóµÄʵÀý¡£
*/
public abstract class Aggregate {
/**
* ¹¤³§·½·¨£¬´´½¨ÏàÓ¦µü´ú×Ó¶ÔÏóµÄ½Ó¿Ú
*/
public abstract Iterator createIterator();
}

¡¡¡¡¾ßÌå¾Û¼¯½ÇÉ«À࣬ʵÏÖÁ˳éÏó¾Û¼¯½ÇÉ«ÀàËùÒªÇóµÄ½Ó¿Ú£¬Ò²¾ÍÊÇcreateIterator()·½·¨¡£´ËÍ⣬»¹Óз½·¨getElement()ÏòÍâ½çÌṩ¾Û¼¯ÔªËØ£¬¶ø·½·¨size()ÏòÍâ½çÌṩ¾Û¼¯µÄ´óСµÈ¡£

[java]
package com.bankht.Iterator;

/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-6-29 ÉÏÎç11:01:58
*
* @Àà˵Ã÷ £º
* ¾ßÌå¾Û¼¯½ÇÉ«À࣬ʵÏÖÁ˳éÏó¾Û¼¯½ÇÉ«ÀàËùÒªÇóµÄ½Ó¿Ú£¬Ò²¾ÍÊÇcreateIterator()·½·¨¡£
* ´ËÍ⣬»¹Óз½·¨getElement()ÏòÍâ½çÌṩ¾Û¼¯ÔªËØ £¬¶ø·½·¨size()ÏòÍâ½çÌṩ¾Û¼¯µÄ´óСµÈ¡£
*/
public class ConcreteAggregate extends Aggregate {

private Object[] objArray = null;

/**
* ¹¹Ôì·½·¨£¬´«Èë¾ÛºÏ¶ÔÏóµÄ¾ßÌåÄÚÈÝ
*/
public ConcreteAggregate(Object[] objArray) {
this.objArray = objArray;
}

@Override
public Iterator createIterator() {

return new ConcreteIterator(this);
}

/**
* ȡֵ·½·¨£ºÏòÍâ½çÌṩ¾Û¼¯ÔªËØ
*/
public Object getElement(int index) {

if (index < objArray.length) {
return objArray[index];
} else {
return null;
}
}

/**
* ȡֵ·½·¨£ºÏòÍâ½çÌṩ¾Û¼¯µÄ´óС
*/
public int size() {
return objArray.length;
}
}
package com.bankht.Iterator;

/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-6-29 ÉÏÎç11:01:58
*
* @Àà˵Ã÷ £º
* ¾ßÌå¾Û¼¯½ÇÉ«À࣬ʵÏÖÁ˳éÏó¾Û¼¯½ÇÉ«ÀàËùÒªÇóµÄ½Ó¿Ú£¬Ò²¾ÍÊÇcreateIterator()·½·¨¡£
* ´ËÍ⣬»¹Óз½·¨getElement()ÏòÍâ½çÌá