×éºÏģʽҲ½Ð×ö¡°²¿·Ö-ÕûÌ塱ģʽ£¬ÕâÑùÆäʵ¶¨ÒåÒ²¾ÍºÜÃ÷ÏÔÁË£¬ÕýºÃºÍÊý¾Ý½á¹¹µÄ֪ʶÏà¶ÔÓ¦£¬°Ñ¶ÔÏó×éºÏ³ÉÊ÷ÐνṹÒÔ±íʾ¡°²¿·Ö-ÕûÌ塱µÄ²ã´Î½á¹¹¡£
ÏÈ¿´Ààͼ£º

Ê×ÏÈ·ÖÎöÒ»ÏÂÕâ¸öÀàͼ£¬LeafºÍCompZ??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vc2l0ZcrHzayxsrXEo6y2vMrHvMyz0Li4wOBDb21wb25lbnSjrNPW0vLOqkNvbXBvbmVudNbQtObU2kxlYWbX08Dgo6zL+dLUy/u6zUNvbXBvbmVudLu5tObU2tfFvtu6z7nYz7U8L3A+CjxwPjxicj4KPC9wPgo8cD4gICAgIL7Z0ru49rrcs6O8+7XEwP3X06OsztLDx8zszOy21NfFtefE1KOsus2499bWzsS8/qOszsS8/rzQtPK9u7XAo6zV4rK7vs3Kx9K7uPa63LrDtdjX6brPxKPKvcLwo788L3A+CjxwPjxzdHJvbmc+wLS/tL+0wODNvKO6PC9zdHJvbmc+PC9wPgo8cD48aW1nIHNyYz0="https://www.cppentry.com/upload_files/article/49/1_iyppw__.png" alt="\">
À´¿´¿´¾ßÌåµÄʵÏÖ´úÂ룺
AbstractFileΪ×éºÏÖеĶÔÏóÉùÃ÷½Ó¿Ú£¬ÊµÏÖËùÓÐÀ๲ÓнӿڵÄĬÈÏÐÐΪ¡£
package composite;
import java.util.*; //Ìí¼ÓÒýÓÃ
public abstract class AbstractFile {
protected String name; // ¶¨Òåname×Ö¶Î
public void printName() {
System.out.println(name);
}
// ͨ³£¶¼ÓÃaddºÍremove·½·¨À´ÌṩÔö¼Ó»òÒÆ³ýÊ÷Ò¶»òÊ÷Ö¦µÄ¹¦ÄÜ
public abstract boolean addChild(AbstractFile file); // Ôö¼Ó
public abstract boolean removeChild(AbstractFile file); // ÒÆ³ý
// Ò»¸ö¼¯ºÏ£¬´æ·ÅÕªÒªÎļþµÄ×ÓÎļþµÄ¶ÔÏó
public abstract List
getChildren();
}
FileΪ×ÓÀàÎļþ£¬¼Ì³Ð¸¸À࣬ҲÊÇÊ÷ÖÐËùνµÄÒ¶×ӽڵ㣬Ҷ×Ó½ÚµãÊÇûÓÐ×Ó½ÚµãµÄ£¬ËùÒÔ¸¸ÀàËùνµÄ·½·¨²¢²»ÄÜʵÏÖ£¬·µ»ØtrueºÍnull
package composite;
import java.util.*;
public class File extends AbstractFile {
public File(String name) {
this.name = name;
}
//Îļþ²¢Ã»ÓÐÌí¼ÓµÄÄÜÁ¦£¬ËüÖ»ÊÇÒ»¸öµ¥¶ÀµÄ¸öÌå
public boolean addChild(AbstractFile file) {
return false;
}
//¶ÔÓÚÎļþ±¾Éí£¬ÒѾÊÇÒ¶×Ó½ÚµãÁË£¬ËùÒÔÒ²ÎÞɾ³ý×ÓÎļþµÄ¹¦ÄÜ
public boolean removeChild(AbstractFile file) {
return false;
}
// ÓÉÓÚFileÒѾÊÇÒ¶×Ó½ÚµãÁË£¬ËùÒԾͲ»´æÔÚ¼¯ºÏÕâһ˵£¬ËùÒÔÕâ¸ö·½·¨·µ»ØµÄÊÇ¿ÕÖµ
public List
getChildren() {
return null;
}
}
FolderΪ×ÓÀàÎļþ¼Ð£¬Í¬ÑùÒ²¼Ì³ÐÓÚ¸¸À࣬µ«ÊÇ´ËÀàÖ»ÊÇÒ»¸öÆÕͨµÄ½Úµã£¬Àï±ßÒÀ¾É°üº¬Ò¶×ӽڵ㡣
package composite;
import java.util.*;
public class Folder extends AbstractFile {
private List
childList ;
public Folder(String name) {
this.name = name;
//ÓÃÀ´½¨Á¢Ò»¸ö¼¯ºÏ±£´æ×ÓÎļþ
this.childList = new ArrayList
(); } //Ìí¼Ó×ÓÎļþ public boolean addChild(AbstractFile file) { return childList.add(file); } //ɾ³ý×ÓÎļþ public boolean removeChild(AbstractFile file) { return childList.remove(file); } // ×ÓÀàµÄ·µ»ØÀàÐÍÓ¦¸ÃºÍ¸¸ÀàµÄ¶¨Òå±£³ÖÒ»Ö public List
getChildren() { return childList; } }
×îºóÀ´¿´¿´¿Í»§¶ËÊÇÈçºÎµ÷ÓúʹòÓ¡µÄ
package composite;
import java.util.List;
public class Client {
public static void main(String[] args) {
// TODO ×Ô¶¯Éú³ÉµÄ·½·¨´æ¸ù
// ¹¹ÔìÒ»¸öÊ÷ÐεÄÎļþ¡¢Ä¿Â¼½á¹¹
AbstractFile rootFolder = new Folder("c:\\");
AbstractFile compositeFolder = new Folder("composite");
AbstractFile windowsFolder = new Folder("windows");
AbstractFile file = new File("TestComposite.java");
rootFolder.addChild(compositeFolder);
rootFolder.addChild(windowsFolder);
compositeFolder.addChild(file);
// ´òӡĿ¼ÎļþÊ÷
printTree(rootFolder);
}
private static void printTree(AbstractFile ifile) {
ifile.printName();
List
children = ifile.getChildren();
if (children == null)
return;
for (AbstractFile file : children) {
printTree(file); // ´òÓ¡·½·¨µÄµ÷ÓÃ
}
}
}
͸Ã÷·½Ê½Ó밲ȫ·½Ê½
ÔÚFile×ÓÀàÖУ¬ËûËùνµÄ¸÷ÖÖ·½·¨¶¼ÊDz»ÊµÐе쬵«ÊÇÈ´ÒÀ¾É´æÔÚ£¬ÕâÖÖ·½Ê½¾Í½Ð×ö¡°Í¸Ã÷·½Ê½¡±£»ÕâÑù×öµÄºÃ´¦¾ÍÊÇÒ¶×Ó½ÚµãºÍÖ¦½Úµã¶ÔÓÚÍâ½çûÓÐÇø±ð£¬ËüÃǾ߱¸ÍêȫһÖµÄÐÐΪ½Ó¿Ú£»µ«ÊÇÎÊÌâÒ²»áºÜÃ÷ÏԵģ¬ÄǾÍÊÇÔÚFileÖÐÄÇЩËùνµÄ·½·¨µÄ´æÔÚÊǺÁÎÞÒâÒåµÄ£»
Èç¹û²»ÏëÈÃÆä×öÎÞÓù¦£¬Ò²¾ÍÊǰÑFile×ÓÀàÖеÄÎÞÒâÒåµÄ·½·¨¶¼È¥µô£¬ÕâÖÖ·½Ê½½Ð×ö¡°°²È«·½Ê½¡±£»µ«ÊÇÓÉÓÚÊDz»Í¸Ã÷µÄ£¬ËùÒÔËûÃǾͲ»ÄܾßÓÐÒ»ÖµĽӿÚÁË£¬ÕâÑù·´¶øÔö¼ÓÁËÆä¸´ÔÓÐÔ£¬¿Í»§¶ËµÄµ÷ÓÃÐèÒªÔÙÔö¼ÓÆäÏàÓ¦µÄÅжϡ£
ʲôʱºòʹÓÃ×éºÏģʽ£¿
1£©ÐèÇóÖÐÌåÏÖµÄÊÇ¡°²¿·Ö-ÕûÌ塱µÄ²ã´ÎµÄ½á¹¹Ê±£¬Ê¹ÓôËģʽ£»
2£©Óû§Ï£ÍûºöÂÔ×éºÏ¶ÔÏóÓëµ¥¸ö¶ÔÏóµÄ²»Í¬£¬Í³Ò»µØÊ¹ÓÃ×éºÏ½á¹¹ÖеÄËùÓеÄ