first version of pattern without Tests
This commit is contained in:
parent
82b9f4fea7
commit
645e91ed23
15
extension-objects/pom.xml
Normal file
15
extension-objects/pom.xml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<parent>
|
||||||
|
<artifactId>java-design-patterns</artifactId>
|
||||||
|
<groupId>com.iluwatar</groupId>
|
||||||
|
<version>1.16.0-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>extension-objects</artifactId>
|
||||||
|
|
||||||
|
|
||||||
|
</project>
|
59
extension-objects/src/main/java/App.java
Normal file
59
extension-objects/src/main/java/App.java
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
import abstractextensions.CommanderExtension;
|
||||||
|
import abstractextensions.SergeantExtension;
|
||||||
|
import abstractextensions.SoldierExtension;
|
||||||
|
import units.CommanderUnit;
|
||||||
|
import units.SergeantUnit;
|
||||||
|
import units.SoldierUnit;
|
||||||
|
import units.Unit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Srdjan on 26-Apr-17.
|
||||||
|
*/
|
||||||
|
public class App {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Program entry point
|
||||||
|
*
|
||||||
|
* @param args command line args
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
//Create 3 different units
|
||||||
|
Unit unit = new SoldierUnit("SoldierUnit1");
|
||||||
|
Unit unit1 = new SergeantUnit("SergeantUnit1");
|
||||||
|
Unit unit2 = new CommanderUnit("CommanderUnit1");
|
||||||
|
|
||||||
|
//check for each unit to have an extension
|
||||||
|
checkExtensionsForUnit(unit);
|
||||||
|
checkExtensionsForUnit(unit1);
|
||||||
|
checkExtensionsForUnit(unit2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void checkExtensionsForUnit(Unit unit) {
|
||||||
|
//separate for better view
|
||||||
|
System.out.println();
|
||||||
|
|
||||||
|
SoldierExtension soldierExtension = (SoldierExtension) unit.getUnitExtension("SoldierExtension");
|
||||||
|
SergeantExtension sergeantExtension = (SergeantExtension) unit.getUnitExtension("SergeantExtension");
|
||||||
|
CommanderExtension commanderExtension = (CommanderExtension) unit.getUnitExtension("CommanderExtension");
|
||||||
|
|
||||||
|
if (soldierExtension != null) {
|
||||||
|
soldierExtension.soldierReady();
|
||||||
|
} else {
|
||||||
|
System.out.println(unit.getName() + " without SoldierExtension");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sergeantExtension != null) {
|
||||||
|
sergeantExtension.sergeantReady();
|
||||||
|
} else {
|
||||||
|
System.out.println(unit.getName() + " without SergeantExtension");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (commanderExtension != null) {
|
||||||
|
// commanderExtension.sergeantReady();
|
||||||
|
} else {
|
||||||
|
System.out.println(unit.getName() + " without CommanderExtension");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
package abstractextensions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Srdjan on 27-Apr-17.
|
||||||
|
*/
|
||||||
|
public interface CommanderExtension extends UnitExtension {
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
package abstractextensions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Srdjan on 27-Apr-17.
|
||||||
|
*/
|
||||||
|
public interface SergeantExtension extends UnitExtension {
|
||||||
|
|
||||||
|
void sergeantReady();
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package abstractextensions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Srdjan on 26-Apr-17.
|
||||||
|
*/
|
||||||
|
public interface SoldierExtension extends UnitExtension {
|
||||||
|
void soldierReady();
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
package abstractextensions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Srdjan on 26-Apr-17.
|
||||||
|
*/
|
||||||
|
public interface UnitExtension {
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package concreteextensions;
|
||||||
|
|
||||||
|
import abstractextensions.CommanderExtension;
|
||||||
|
import units.CommanderUnit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Srdjan on 27-Apr-17.
|
||||||
|
*/
|
||||||
|
public class Commander implements CommanderExtension {
|
||||||
|
|
||||||
|
private CommanderUnit unit;
|
||||||
|
|
||||||
|
public Commander(CommanderUnit commanderUnit) {
|
||||||
|
this.unit = commanderUnit;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package concreteextensions;
|
||||||
|
|
||||||
|
import abstractextensions.SergeantExtension;
|
||||||
|
import units.SergeantUnit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Srdjan on 27-Apr-17.
|
||||||
|
*/
|
||||||
|
public class Sergeant implements SergeantExtension {
|
||||||
|
|
||||||
|
private SergeantUnit unit;
|
||||||
|
|
||||||
|
public Sergeant(SergeantUnit sergeantUnit) {
|
||||||
|
this.unit = sergeantUnit;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sergeantReady() {
|
||||||
|
System.out.println("[Sergeant] " + unit.getName() + " do command! ");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package concreteextensions;
|
||||||
|
|
||||||
|
import abstractextensions.SoldierExtension;
|
||||||
|
import units.SoldierUnit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Srdjan on 26-Apr-17.
|
||||||
|
*/
|
||||||
|
public class Soldier implements SoldierExtension {
|
||||||
|
|
||||||
|
private SoldierUnit unit;
|
||||||
|
|
||||||
|
public Soldier(SoldierUnit soldierUnit) {
|
||||||
|
this.unit = soldierUnit;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void soldierReady() {
|
||||||
|
System.out.println("[Solider] " + unit.getName() + " do command");
|
||||||
|
}
|
||||||
|
}
|
30
extension-objects/src/main/java/units/CommanderUnit.java
Normal file
30
extension-objects/src/main/java/units/CommanderUnit.java
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
package units;
|
||||||
|
|
||||||
|
import abstractextensions.CommanderExtension;
|
||||||
|
import abstractextensions.UnitExtension;
|
||||||
|
import concreteextensions.Commander;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Srdjan on 27-Apr-17.
|
||||||
|
*/
|
||||||
|
public class CommanderUnit extends Unit {
|
||||||
|
|
||||||
|
private CommanderExtension commanderExtension;
|
||||||
|
|
||||||
|
public CommanderUnit(String name) {
|
||||||
|
super(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UnitExtension getUnitExtension(String extensionName) {
|
||||||
|
|
||||||
|
if (extensionName.equals("CommanderExtension")) {
|
||||||
|
if (commanderExtension == null) {
|
||||||
|
commanderExtension = new Commander(this);
|
||||||
|
}
|
||||||
|
return commanderExtension;
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.getUnitExtension(extensionName);
|
||||||
|
}
|
||||||
|
}
|
30
extension-objects/src/main/java/units/SergeantUnit.java
Normal file
30
extension-objects/src/main/java/units/SergeantUnit.java
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
package units;
|
||||||
|
|
||||||
|
import abstractextensions.SergeantExtension;
|
||||||
|
import abstractextensions.UnitExtension;
|
||||||
|
import concreteextensions.Sergeant;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Srdjan on 27-Apr-17.
|
||||||
|
*/
|
||||||
|
public class SergeantUnit extends Unit {
|
||||||
|
|
||||||
|
private SergeantExtension sergeantExtension;
|
||||||
|
|
||||||
|
public SergeantUnit(String name) {
|
||||||
|
super(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UnitExtension getUnitExtension(String extensionName) {
|
||||||
|
|
||||||
|
if (extensionName.equals("SergeantExtension")) {
|
||||||
|
if (sergeantExtension == null) {
|
||||||
|
sergeantExtension = new Sergeant(this);
|
||||||
|
}
|
||||||
|
return sergeantExtension;
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.getUnitExtension(extensionName);
|
||||||
|
}
|
||||||
|
}
|
30
extension-objects/src/main/java/units/SoldierUnit.java
Normal file
30
extension-objects/src/main/java/units/SoldierUnit.java
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
package units;
|
||||||
|
|
||||||
|
import abstractextensions.SoldierExtension;
|
||||||
|
import abstractextensions.UnitExtension;
|
||||||
|
import concreteextensions.Soldier;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Srdjan on 26-Apr-17.
|
||||||
|
*/
|
||||||
|
public class SoldierUnit extends Unit {
|
||||||
|
|
||||||
|
private SoldierExtension soldierExtension;
|
||||||
|
|
||||||
|
public SoldierUnit(String name) {
|
||||||
|
super(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UnitExtension getUnitExtension(String extensionName) {
|
||||||
|
|
||||||
|
if (extensionName.equals("SoldierExtension")) {
|
||||||
|
if (soldierExtension == null) {
|
||||||
|
soldierExtension = new Soldier(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
return soldierExtension;
|
||||||
|
}
|
||||||
|
return super.getUnitExtension(extensionName);
|
||||||
|
}
|
||||||
|
}
|
27
extension-objects/src/main/java/units/Unit.java
Normal file
27
extension-objects/src/main/java/units/Unit.java
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package units;
|
||||||
|
|
||||||
|
import abstractextensions.UnitExtension;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Srdjan on 26-Apr-17.
|
||||||
|
*/
|
||||||
|
public class Unit {
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public Unit(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UnitExtension getUnitExtension(String extensionName) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
1
pom.xml
1
pom.xml
@ -139,6 +139,7 @@
|
|||||||
<module>converter</module>
|
<module>converter</module>
|
||||||
<module>guarded-suspension</module>
|
<module>guarded-suspension</module>
|
||||||
<module>balking</module>
|
<module>balking</module>
|
||||||
|
<module>extension-objects</module>
|
||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
<dependencyManagement>
|
<dependencyManagement>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user