Composite Pattern

This commit is contained in:
kim
2021-01-14 17:37:50 +09:00
parent 44537138fe
commit 3ca5b69ce9
5 changed files with 105 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
package Composite;
abstract public class Component {
private String name;
public Component(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

View File

@@ -0,0 +1,3 @@
Composite Pattern
- 컨테이너와 내용물을 같게 다루기
- Composite 패턴을 통해서 트리구조 구현

View File

@@ -0,0 +1,18 @@
package Composite;
public class File extends Component{
private Object data;
public File(String name) {
super(name);
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}

View File

@@ -0,0 +1,25 @@
package Composite;
import java.util.ArrayList;
import java.util.List;
public class Folder extends Component {
List<Component> children = new ArrayList<>();
public Folder(String name) {
super(name);
}
public boolean addComponent(Component component) {
return children.add(component);
}
public boolean removeComponent(Component component){
return children.remove(component);
}
public List<Component> getChildren() {
return children;
}
}

View File

@@ -0,0 +1,41 @@
package Composite;
public class Main {
public static void main(String[] args) {
Folder root = new Folder("root"),
home = new Folder("home"),
garam = new Folder("garam"),
music = new Folder("music"),
picture = new Folder("picture"),
doc = new Folder("doc"),
usr = new Folder("usr");
File track1 = new File("track1"),
track2 = new File("track2"),
pic1 = new File("pic1"),
doc1 = new File("doc1"),
java = new File("java");
root.addComponent(home);
home.addComponent(garam);
garam.addComponent(music);
music.addComponent(track1);
music.addComponent(track2);
garam.addComponent(picture);
picture.addComponent(pic1);
garam.addComponent(doc);
doc.addComponent(doc1);
root.addComponent(usr);
usr.addComponent(java);
show(root);
}
private static void show(Component component) {
System.out.println(component.getClass().getName() + "|" + component.getName());
if(component instanceof Folder) {
for (Component c : ((Folder) component).getChildren()) {
show(c);
}
}
}
}