Skip to content

Commit 645e91e

Browse files
first version of pattern without Tests
1 parent 82b9f4f commit 645e91e

14 files changed

Lines changed: 281 additions & 0 deletions

File tree

extension-objects/pom.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<parent>
6+
<artifactId>java-design-patterns</artifactId>
7+
<groupId>com.iluwatar</groupId>
8+
<version>1.16.0-SNAPSHOT</version>
9+
</parent>
10+
<modelVersion>4.0.0</modelVersion>
11+
12+
<artifactId>extension-objects</artifactId>
13+
14+
15+
</project>
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import abstractextensions.CommanderExtension;
2+
import abstractextensions.SergeantExtension;
3+
import abstractextensions.SoldierExtension;
4+
import units.CommanderUnit;
5+
import units.SergeantUnit;
6+
import units.SoldierUnit;
7+
import units.Unit;
8+
9+
/**
10+
* Created by Srdjan on 26-Apr-17.
11+
*/
12+
public class App {
13+
14+
/**
15+
* Program entry point
16+
*
17+
* @param args command line args
18+
*/
19+
public static void main(String[] args) {
20+
21+
//Create 3 different units
22+
Unit unit = new SoldierUnit("SoldierUnit1");
23+
Unit unit1 = new SergeantUnit("SergeantUnit1");
24+
Unit unit2 = new CommanderUnit("CommanderUnit1");
25+
26+
//check for each unit to have an extension
27+
checkExtensionsForUnit(unit);
28+
checkExtensionsForUnit(unit1);
29+
checkExtensionsForUnit(unit2);
30+
31+
}
32+
33+
private static void checkExtensionsForUnit(Unit unit) {
34+
//separate for better view
35+
System.out.println();
36+
37+
SoldierExtension soldierExtension = (SoldierExtension) unit.getUnitExtension("SoldierExtension");
38+
SergeantExtension sergeantExtension = (SergeantExtension) unit.getUnitExtension("SergeantExtension");
39+
CommanderExtension commanderExtension = (CommanderExtension) unit.getUnitExtension("CommanderExtension");
40+
41+
if (soldierExtension != null) {
42+
soldierExtension.soldierReady();
43+
} else {
44+
System.out.println(unit.getName() + " without SoldierExtension");
45+
}
46+
47+
if (sergeantExtension != null) {
48+
sergeantExtension.sergeantReady();
49+
} else {
50+
System.out.println(unit.getName() + " without SergeantExtension");
51+
}
52+
53+
if (commanderExtension != null) {
54+
// commanderExtension.sergeantReady();
55+
} else {
56+
System.out.println(unit.getName() + " without CommanderExtension");
57+
}
58+
}
59+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package abstractextensions;
2+
3+
/**
4+
* Created by Srdjan on 27-Apr-17.
5+
*/
6+
public interface CommanderExtension extends UnitExtension {
7+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package abstractextensions;
2+
3+
/**
4+
* Created by Srdjan on 27-Apr-17.
5+
*/
6+
public interface SergeantExtension extends UnitExtension {
7+
8+
void sergeantReady();
9+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package abstractextensions;
2+
3+
/**
4+
* Created by Srdjan on 26-Apr-17.
5+
*/
6+
public interface SoldierExtension extends UnitExtension {
7+
void soldierReady();
8+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package abstractextensions;
2+
3+
/**
4+
* Created by Srdjan on 26-Apr-17.
5+
*/
6+
public interface UnitExtension {
7+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package concreteextensions;
2+
3+
import abstractextensions.CommanderExtension;
4+
import units.CommanderUnit;
5+
6+
/**
7+
* Created by Srdjan on 27-Apr-17.
8+
*/
9+
public class Commander implements CommanderExtension {
10+
11+
private CommanderUnit unit;
12+
13+
public Commander(CommanderUnit commanderUnit) {
14+
this.unit = commanderUnit;
15+
}
16+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package concreteextensions;
2+
3+
import abstractextensions.SergeantExtension;
4+
import units.SergeantUnit;
5+
6+
/**
7+
* Created by Srdjan on 27-Apr-17.
8+
*/
9+
public class Sergeant implements SergeantExtension {
10+
11+
private SergeantUnit unit;
12+
13+
public Sergeant(SergeantUnit sergeantUnit) {
14+
this.unit = sergeantUnit;
15+
}
16+
17+
@Override
18+
public void sergeantReady() {
19+
System.out.println("[Sergeant] " + unit.getName() + " do command! ");
20+
}
21+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package concreteextensions;
2+
3+
import abstractextensions.SoldierExtension;
4+
import units.SoldierUnit;
5+
6+
/**
7+
* Created by Srdjan on 26-Apr-17.
8+
*/
9+
public class Soldier implements SoldierExtension {
10+
11+
private SoldierUnit unit;
12+
13+
public Soldier(SoldierUnit soldierUnit) {
14+
this.unit = soldierUnit;
15+
}
16+
17+
@Override
18+
public void soldierReady() {
19+
System.out.println("[Solider] " + unit.getName() + " do command");
20+
}
21+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package units;
2+
3+
import abstractextensions.CommanderExtension;
4+
import abstractextensions.UnitExtension;
5+
import concreteextensions.Commander;
6+
7+
/**
8+
* Created by Srdjan on 27-Apr-17.
9+
*/
10+
public class CommanderUnit extends Unit {
11+
12+
private CommanderExtension commanderExtension;
13+
14+
public CommanderUnit(String name) {
15+
super(name);
16+
}
17+
18+
@Override
19+
public UnitExtension getUnitExtension(String extensionName) {
20+
21+
if (extensionName.equals("CommanderExtension")) {
22+
if (commanderExtension == null) {
23+
commanderExtension = new Commander(this);
24+
}
25+
return commanderExtension;
26+
}
27+
28+
return super.getUnitExtension(extensionName);
29+
}
30+
}

0 commit comments

Comments
 (0)