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;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user