Guest User

Untitled

a guest
Mar 19th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.25 KB | None | 0 0
  1. interface IConfigurationElement {
  2. void acceptVisitor(IConfigurationElementVisitor visitor);
  3. }
  4.  
  5. interface Visitable {
  6. void accept(Object visitor);
  7. }
  8. interface AVisitor {
  9. void visitA(A a);
  10. }
  11. interface BVisitor {
  12. void visitB(B b);
  13. }
  14. interface CVisitor {
  15. void visitB(C c);
  16. }
  17.  
  18. class C implements Visitable {
  19. public void accept(Object visitor) {
  20. if (visitor instanceof CVisitor) {
  21. ((BVisitor)vistor).visitC(this);
  22. }
  23. }
  24. }
  25.  
  26. class B implements Visitable {
  27. public void accept(Object visitor) {
  28. if (visitor instanceof BVisitor) {
  29. ((BVisitor)vistor).visitB(this);
  30. }
  31. }
  32. }
  33.  
  34. class A extends B implements Visitable {
  35. public void accept(Object visitor) {
  36. super.accept(visitor);
  37. if (visitor instanceof AVisitor) {
  38. ((AVisitor)vistor).visitA(this);
  39. }
  40. }
  41. }
  42.  
  43. class PrintBs implements BVisitor {
  44. public void visitB(B b) {
  45. system.out.println(b);
  46. }
  47. }
  48.  
  49. class PrintAs implements AVisitor {
  50. public void visitA(A a) {
  51. system.out.println(a);
  52. }
  53. }
  54.  
  55. class PrintCs implements CVisitor {
  56. public void visitC(C c) {
  57. system.out.println(c);
  58. }
  59. }
  60. class PrintAsAndCs implements CVisitor, AVisitor{
  61. public void visitA(A a) {
  62. system.out.println(a);
  63. }
  64. public void visitC(C c) {
  65. system.out.println(c);
  66. }
  67. }
  68.  
  69. class ConfigurationElementA implements IConfigurationElement, ICommittable {
  70. }
  71.  
  72. class ConfigurationElementB implements IConfigurationElement, IVerifiable {
  73. }
  74.  
  75. class Visitor {
  76. void accept(IConfigurationElement element) {
  77. if (element instanceof ICommittable) {
  78. // ...
  79. }
  80.  
  81. // Note: not a chain of instanceofs.
  82.  
  83. if (element instanceof IVerifiable) {
  84. // ...
  85. }
  86. }
  87. }
  88.  
  89. interface AOrB {
  90. <Result> Result accept(AOrBVisitor<Result> visitor);
  91.  
  92. interface AOrBVisitor<Result> {
  93. Result visit(A a);
  94. Result visit(B b);
  95. }
  96. }
  97.  
  98. interface ThisCouldBeOfTypeB {
  99. <Result> Result accept(ThisCouldBeOfTypeBVisitor<Result> visitor);
  100.  
  101. interface ThisCouldBeOfTypeBVisitor<Result> {
  102. Result visit(B b);
  103. Result visit(ThisCouldBeOfTypeB visitable);
  104. }
  105. }
  106.  
  107.  
  108. class A implements AOrB, ThisCouldBeOfTypeBVisitor {...}
  109.  
  110. class B implements AOrB, ThisCouldBeOfTypeBVisitor {...}
  111.  
  112. class C implements ThisCouldBeOfTypeBVisitor {...}
Add Comment
Please, Sign In to add comment