Guest User

Untitled

a guest
Jun 25th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. import java.util.ArrayList;
  2.  
  3. abstract class Component {
  4. private String name;
  5.  
  6. Component(String name) {
  7. this.name = name;
  8. }
  9.  
  10. String getName() {
  11. return name;
  12. }
  13.  
  14. abstract void accept(Visitor visitor);
  15. }
  16.  
  17. class Composite extends Component {
  18. private ArrayList<Component> components = new ArrayList<>();
  19.  
  20. Composite(String name) {
  21. super(name);
  22. }
  23.  
  24. void add(Component component) {
  25. components.add(component);
  26. }
  27.  
  28. ArrayList<Component> getComponents() {
  29. return components;
  30. }
  31.  
  32. void accept(Visitor v) {
  33. v.visit(this);
  34. }
  35. }
  36.  
  37. class Element extends Component {
  38. void accept(Visitor v) {
  39. v.visit(this);
  40. }
  41.  
  42. Element(String name) {
  43. super(name);
  44. }
  45. }
  46.  
  47.  
  48. public class Main {
  49. public static void main(String[] args) {
  50. Composite root = new Composite("root");
  51. root.add(new Element("element1"));
  52. Composite composite1 = new Composite("composite1");
  53. composite1.add(new Element("element2"));
  54. composite1.add(new Composite("composite2"));
  55. composite1.add(new Element("element3"));
  56. root.add(composite1);
  57. root.add(new Element("element4"));
  58.  
  59. root.accept(new NameVisitor());
  60. }
  61. }
  62.  
  63. interface Visitor {
  64. void visit(Composite composite);
  65. void visit(Element element);
  66. }
  67.  
  68. class NameVisitor implements Visitor {
  69. private int depth = 0;
  70. private ArrayList<String> names = new ArrayList<>();
  71.  
  72. public void visit(Composite composite) {
  73. names.add(composite.getName());
  74. ++depth;
  75. for (Component component: composite.getComponents()) {
  76. component.accept(this);
  77. }
  78. --depth;
  79. if (depth == 0) {
  80. display();
  81. }
  82. }
  83.  
  84. public void visit(Element element) {
  85. names.add(element.getName());
  86. display();
  87. }
  88.  
  89. private void display() {
  90. for (String name: names) {
  91. System.out.println(name);
  92. }
  93. }
  94. }
Add Comment
Please, Sign In to add comment