Skip to content

Commit 54056be

Browse files
committed
Added Command and Iterator
1 parent f5ecca3 commit 54056be

File tree

2 files changed

+239
-0
lines changed

2 files changed

+239
-0
lines changed
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package com.behavioral.command;
2+
3+
import com.squareup.javapoet.*;
4+
5+
import javax.lang.model.element.Modifier;
6+
7+
public class command {
8+
public static void main(String[] args) {
9+
String input1 = "Command";
10+
String input2 = "Invoker";
11+
String input3 = "Receiver";
12+
String input4 = "ConcreteCommand";
13+
String packageName = "com.BehavioralDP.command";
14+
15+
// Command interface declaration
16+
ClassName Command = ClassName.get("",input1);
17+
MethodSpec execute = MethodSpec.methodBuilder("execute")
18+
.addModifiers(Modifier.ABSTRACT,Modifier.PUBLIC)
19+
.returns(TypeName.VOID)
20+
.build();
21+
TypeSpec command = TypeSpec.interfaceBuilder(Command)
22+
.addModifiers(Modifier.PUBLIC)
23+
.addJavadoc("""
24+
Command interface, declares an interface for executing an operation""")
25+
.addMethod(execute)
26+
.build();
27+
JavaFile class1 = JavaFile.builder(packageName,command)
28+
.skipJavaLangImports(true)
29+
.build();
30+
31+
// Invoker class declaration
32+
ClassName Invoker = ClassName.get("",input2);
33+
TypeSpec invoker = TypeSpec.classBuilder(Invoker)
34+
.addModifiers(Modifier.PUBLIC)
35+
.addJavadoc("""
36+
Invoker class, asks the command to carry out the request""")
37+
.addField(Command, "command", Modifier.PRIVATE)
38+
.addMethod(MethodSpec.constructorBuilder()
39+
.addModifiers(Modifier.PUBLIC)
40+
.addParameter(Command,"command")
41+
.addStatement("this.$N = command", "command")
42+
.build())
43+
.addMethod(MethodSpec.methodBuilder(execute.name)
44+
.addModifiers(Modifier.PUBLIC)
45+
.returns(TypeName.VOID)
46+
.addStatement("$N.$N()","command", execute.name)
47+
.build())
48+
.build();
49+
JavaFile class2 = JavaFile.builder(packageName,invoker)
50+
.skipJavaLangImports(true)
51+
.build();
52+
53+
// Receiver class declaration
54+
ClassName Receiver = ClassName.get("",input3);
55+
FieldSpec opPerf = FieldSpec.builder(Boolean.TYPE,"operationPerfomed")
56+
.addModifiers(Modifier.PRIVATE)
57+
.initializer("false")
58+
.build();
59+
TypeSpec receiver = TypeSpec.classBuilder(Receiver)
60+
.addModifiers(Modifier.PUBLIC)
61+
.addJavadoc("""
62+
Receiver class, knows how to perform the operations associated with carrying
63+
out a request""")
64+
.addField(opPerf)
65+
.addMethod(MethodSpec.methodBuilder("action")
66+
.addModifiers(Modifier.PUBLIC)
67+
.returns(TypeName.VOID)
68+
.addStatement("$N = true",opPerf.name)
69+
.build())
70+
.addMethod(MethodSpec.methodBuilder("isOperationPerfomed")
71+
.addModifiers(Modifier.PROTECTED)
72+
.returns(TypeName.BOOLEAN)
73+
.addStatement("return $N",opPerf.name)
74+
.build())
75+
.build();
76+
JavaFile class3 = JavaFile.builder(packageName,receiver)
77+
.skipJavaLangImports(true)
78+
.build();
79+
80+
// ConcreteCommand class declaration
81+
ClassName ConcreteCommand = ClassName.get("",input4);
82+
TypeSpec concreteCommand = TypeSpec.classBuilder(ConcreteCommand)
83+
.addSuperinterface(Command)
84+
.addModifiers(Modifier.PUBLIC)
85+
.addJavadoc("""
86+
ConcreteCommand class, defines a binding between a Receiver object and an
87+
operation""")
88+
.addField(Receiver, "receiver",Modifier.PRIVATE)
89+
.addMethod(MethodSpec.constructorBuilder()
90+
.addModifiers(Modifier.PUBLIC)
91+
.addParameter(Receiver, "receiver")
92+
.addStatement("this.$N = receiver","receiver")
93+
.build())
94+
.addMethod(MethodSpec.methodBuilder(execute.name)
95+
.addModifiers(Modifier.PUBLIC)
96+
.returns(TypeName.VOID)
97+
.addStatement("this.$N.$N()","receiver","action")
98+
.build())
99+
.build();
100+
JavaFile class4 = JavaFile.builder(packageName,concreteCommand)
101+
.skipJavaLangImports(true)
102+
.build();
103+
104+
System.out.println(class1);
105+
System.out.println(class2);
106+
System.out.println(class3);
107+
System.out.println(class4);
108+
}
109+
}
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
package com.behavioral.iterator;
2+
3+
import com.squareup.javapoet.*;
4+
5+
import javax.lang.model.element.Modifier;
6+
7+
8+
public class iterator {
9+
public static void main(String[] args) {
10+
String input1 = "Iterator";
11+
String input2 = "Aggregate";
12+
String input3 = "ConcreteAggregate";
13+
String input4 = "ConcreteIterator";
14+
15+
String packageName = "com.BehavioralDP.iterator";
16+
17+
// Observer interface declaration
18+
ClassName Iterator = ClassName.get("",input1);
19+
ClassName ConcreteIterator = ClassName.get("",input4);
20+
MethodSpec first = MethodSpec.methodBuilder("first")
21+
.addModifiers(Modifier.PUBLIC,Modifier.ABSTRACT).returns(TypeName.OBJECT)
22+
.build();
23+
MethodSpec next = MethodSpec.methodBuilder("next")
24+
.addModifiers(Modifier.PUBLIC,Modifier.ABSTRACT).returns(TypeName.OBJECT)
25+
.build();
26+
MethodSpec isDone = MethodSpec.methodBuilder("isDone")
27+
.addModifiers(Modifier.PUBLIC,Modifier.ABSTRACT).returns(TypeName.BOOLEAN)
28+
.build();
29+
MethodSpec currentItem = MethodSpec.methodBuilder("currentItem")
30+
.addModifiers(Modifier.PUBLIC,Modifier.ABSTRACT).returns(TypeName.OBJECT)
31+
.build();
32+
TypeSpec iterator = TypeSpec.interfaceBuilder(Iterator)
33+
.addModifiers(Modifier.PUBLIC)
34+
.addJavadoc("Iterator defines an interface for accessing and traversing elements.")
35+
.addMethod(first)
36+
.addMethod(next)
37+
.addMethod(isDone)
38+
.addMethod(currentItem)
39+
.build();
40+
JavaFile class1 = JavaFile.builder(packageName,iterator)
41+
.skipJavaLangImports(true)
42+
.build();
43+
44+
// Aggregate interface declaration
45+
ClassName Aggregate = ClassName.get("",input2);
46+
MethodSpec createIterator = MethodSpec.methodBuilder("createIterator")
47+
.addModifiers(Modifier.PUBLIC,Modifier.ABSTRACT).returns(Iterator)
48+
.build();
49+
TypeSpec aggregate = TypeSpec.interfaceBuilder(Aggregate)
50+
.addModifiers(Modifier.PUBLIC)
51+
.addJavadoc("Aggregate defines an interface for creating an Iterator object.")
52+
.addMethod(createIterator)
53+
.build();
54+
JavaFile class2 = JavaFile.builder(packageName,aggregate)
55+
.skipJavaLangImports(true)
56+
.build();
57+
58+
// ConcreteAggregate class declaration
59+
ClassName ConcreteAggregate = ClassName.get("",input3);
60+
// String[] stringRecords = { "first", "second", "third", "fourth" };
61+
FieldSpec records = FieldSpec.builder(String[].class,"records",Modifier.FINAL,Modifier.PRIVATE)
62+
.initializer(" { \"first\", \"second\", \"third\", \"fourth\" }")
63+
.build();
64+
MethodSpec getRecords= MethodSpec.methodBuilder("getRecords")
65+
.addModifiers(Modifier.PROTECTED).returns(String[].class)
66+
.addStatement("return $N", records.name)
67+
.build();
68+
TypeSpec concreteAggregate = TypeSpec.classBuilder(ConcreteAggregate)
69+
.addSuperinterface(Aggregate)
70+
.addModifiers(Modifier.PUBLIC)
71+
.addJavadoc("ConcreteAggregate implements the Iterator creation interface to return an instance of the proper ConcreteIterator.")
72+
.addField(records)
73+
.addMethod(MethodSpec.methodBuilder(createIterator.name)
74+
.addModifiers(Modifier.PUBLIC).returns(Iterator)
75+
.addStatement("return new $T(this)", ConcreteIterator)
76+
.build())
77+
.addMethod(getRecords)
78+
.build();
79+
JavaFile class3 = JavaFile.builder(packageName,concreteAggregate)
80+
.skipJavaLangImports(true).build();
81+
82+
83+
// ConcreteIterator class declaration
84+
FieldSpec concAgg = FieldSpec.builder(ConcreteAggregate,"concreteAggregate",Modifier.PRIVATE)
85+
.build();
86+
FieldSpec index = FieldSpec.builder(int.class,"index",Modifier.PRIVATE)
87+
.initializer("-1")
88+
.build();
89+
TypeSpec concreteIterator = TypeSpec.classBuilder(ConcreteIterator)
90+
.addSuperinterface(Iterator)
91+
.addModifiers(Modifier.PUBLIC)
92+
.addJavadoc("ConcreteIterator implements the Iterator interface. Keeps track of the current position in the traversal of the aggregate.")
93+
.addField(concAgg)
94+
.addField(index)
95+
.addMethod(MethodSpec.constructorBuilder()
96+
.addModifiers(Modifier.PUBLIC)
97+
.addParameter(ConcreteAggregate, "concreteAggregate")
98+
.addStatement("this.$N = concreteAggregate",concAgg.name)
99+
.build())
100+
.addMethod(MethodSpec.methodBuilder(first.name)
101+
.addModifiers(Modifier.PUBLIC).returns(TypeName.OBJECT)
102+
.addStatement("$N = 0",index.name)
103+
.addStatement("return $N.$N()[$N]",concAgg.name,getRecords.name,index.name)
104+
.build())
105+
.addMethod(MethodSpec.methodBuilder(next.name)
106+
.addModifiers(Modifier.PUBLIC).returns(TypeName.OBJECT)
107+
.addStatement("$N++",index.name)
108+
.addStatement("return $N.$N()[$N]",concAgg.name,getRecords.name,index.name)
109+
.build())
110+
.addMethod(MethodSpec.methodBuilder(isDone.name)
111+
.addModifiers(Modifier.PUBLIC).returns(TypeName.BOOLEAN)
112+
.beginControlFlow("if ($N.$N().length == ($N + 1))",concAgg.name,getRecords.name,index.name)
113+
.addStatement("return true")
114+
.endControlFlow()
115+
.addStatement("return false")
116+
.build())
117+
.addMethod(MethodSpec.methodBuilder(currentItem.name)
118+
.addModifiers(Modifier.PUBLIC).returns(TypeName.OBJECT)
119+
.addStatement("return $N.$N()[$N]",concAgg.name,getRecords.name,index.name)
120+
.build())
121+
.build();
122+
JavaFile class4 = JavaFile.builder(packageName,concreteIterator)
123+
.skipJavaLangImports(true).build();
124+
125+
System.out.println(class1);
126+
System.out.println(class2);
127+
System.out.println(class3);
128+
System.out.println(class4);
129+
}
130+
}

0 commit comments

Comments
 (0)