자바 디자인 모드 의 [조합 모드]
5146 단어 자바 디자인 모드
1. 조합 모드 는 트 리 구조 에 대한 작업 에 적 용 됩 니 다. 예 를 들 어 모든 권한 트 리 를 재 귀적 으로 검사 하고 재 귀적 으로 권한 트 리 를 삭제 하 는 등 입 니 다.
2. 추상 적 인 서브 노드 의 경우 예 를 들 어 1 에서 잎 결점 (파일) 과 비 잎 결점 (디 렉 터 리) 은 일치 하지 않 는 행위 가 있다. 예 를 들 어 파일 은 디 렉 터 리 를 추가 할 수 없다. 이런 상황 에서 하나의 인 터 페 이 스 를 설명 하고 1 개의 잎 결점 실현 류 와 1 개의 비 잎 결점 실현 류 를 조합 하여 대상 트 리 의 데이터 구 조 를 조합 해 야 한다.그러나 예 2 중 부서 의 행 위 는 완전히 일치 하기 때문에 예 2 는 조합 모델 의 변종 이 라 고 할 수 있 고 그의 디자인 사상 을 흡수 했 지만 실현 은 더욱 간결 하 다!!
3. 방문 자 모드 와 어 울 려 사용 하기 좋 은 천연
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
예 1: 파일 디 렉 터 리 와 파일 의 트 리 구 조 를 실현 합 니 다.
추상 클래스: 노드
/**
* , , ,
*/
public abstract class Node {
protected String name;//
//
public Node(String name){
this.name = name;
}
// : ,
public void addNode(Node node) throws Exception{
throw new Exception("Invalid exception");
}
// :
abstract void display();
}
:Filter
/**
*
*/
public class Filer extends Node {
//
public Filer(String name) {
super(name);
}
//
@Override
public void display() {
System.out.println(name);
}
}
:Noder
import java.util.*;
/**
*
*/
public class Noder extends Node {
List nodeList = new ArrayList();// ( )
//
public Noder(String name) {
super(name);
}
//
public void addNode(Node node) throws Exception{
nodeList.add(node);
}
//
@Override
void display() {
System.out.println(name);
for(Node node:nodeList){
node.display();
}
}
}
:Clienter
import java.io.File;
public class Clienter {
public static void createTree(Node node) throws Exception{
File file = new File(node.name);
File[] f = file.listFiles();
for(File fi : f){
if(fi.isFile()){
Filer filer = new Filer(fi.getAbsolutePath());
node.addNode(filer);
}
if(fi.isDirectory()){
Noder noder = new Noder(fi.getAbsolutePath());
node.addNode(noder);
createTree(noder);//
}
}
}
public static void main(String[] args) {
Node noder = new Noder("E://ceshi");
try {
createTree(noder);
} catch (Exception e) {
e.printStackTrace();
}
noder.display();
}
}
:
E://ceshi
E:\ceshi\ 1.txt
E:\ceshi\ 1
E:\ceshi\ 1\ 2.txt
E:\ceshi\ 1\ 3
E:\ceshi\ 2
E:\ceshi\ 2\ 3.txt
2:
public class CompositePatternDemo {
public static void main(String[] args) {
Department leafDept1 = new Department(" 1");
Department leafDept2 = new Department(" 2");
Department leafDept3 = new Department(" 3");
Department subDept1 = new Department(" 1");
subDept1.getChildren().add(leafDept1);
subDept1.getChildren().add(leafDept2);
Department subDept2 = new Department(" 2");
subDept2.getChildren().add(leafDept3);
Department parentDept = new Department(" ");
parentDept.getChildren().add(subDept1);
parentDept.getChildren().add(subDept2);
parentDept.remove();
// , , , ,
// , ,
// , , , , ,
// ,
// ,
}
public static class Department {
private String name;
private List children = new ArrayList();
public Department(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List getChildren() {
return children;
}
public void setChildren(List children) {
this.children = children;
}
public void remove() {
if(children.size() > 0) {
for(Department child : children) {
child.remove();
}
}
System.out.println(" 【" + name + "】");
}
}
}
:
【 1】
【 2】
【 1】
【 3】
【 2】
【 】
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 디자인 모드 의 [조합 모드]1. 조합 모드 는 트 리 구조 에 대한 작업 에 적 용 됩 니 다. 예 를 들 어 모든 권한 트 리 를 재 귀적 으로 검사 하고 재 귀적 으로 권한 트 리 를 삭제 하 는 등 입 니 다. 2. 추상 적 인 서브 노...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.