first version of pattern without Tests

This commit is contained in:
SrdjanPaunovic 2017-04-27 13:58:58 +02:00
parent 82b9f4fea7
commit 645e91ed23
14 changed files with 281 additions and 0 deletions

15
extension-objects/pom.xml Normal file
View 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>

View 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");
}
}
}

View File

@ -0,0 +1,7 @@
package abstractextensions;
/**
* Created by Srdjan on 27-Apr-17.
*/
public interface CommanderExtension extends UnitExtension {
}

View File

@ -0,0 +1,9 @@
package abstractextensions;
/**
* Created by Srdjan on 27-Apr-17.
*/
public interface SergeantExtension extends UnitExtension {
void sergeantReady();
}

View File

@ -0,0 +1,8 @@
package abstractextensions;
/**
* Created by Srdjan on 26-Apr-17.
*/
public interface SoldierExtension extends UnitExtension {
void soldierReady();
}

View File

@ -0,0 +1,7 @@
package abstractextensions;
/**
* Created by Srdjan on 26-Apr-17.
*/
public interface UnitExtension {
}

View File

@ -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;
}
}

View File

@ -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! ");
}
}

View File

@ -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");
}
}

View 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);
}
}

View 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);
}
}

View 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);
}
}

View 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;
}
}

View File

@ -139,6 +139,7 @@
<module>converter</module>
<module>guarded-suspension</module>
<module>balking</module>
<module>extension-objects</module>
</modules>
<dependencyManagement>