diff --git a/bridge/pom.xml b/bridge/pom.xml new file mode 100644 index 000000000..382ef2aa2 --- /dev/null +++ b/bridge/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.0-SNAPSHOT + + com.iluwatar + bridge + 1.0-SNAPSHOT + bridge + http://maven.apache.org + + + junit + junit + 3.8.1 + test + + + diff --git a/bridge/src/main/java/com/iluwatar/App.java b/bridge/src/main/java/com/iluwatar/App.java new file mode 100644 index 000000000..695564087 --- /dev/null +++ b/bridge/src/main/java/com/iluwatar/App.java @@ -0,0 +1,26 @@ +package com.iluwatar; + +public class App +{ + public static void main( String[] args ) + { + BlindingMagicWeapon blindingMagicWeapon = new BlindingMagicWeapon(new Excalibur()); + blindingMagicWeapon.wield(); + blindingMagicWeapon.blind(); + blindingMagicWeapon.swing(); + blindingMagicWeapon.unwield(); + + FlyingMagicWeapon flyingMagicWeapon = new FlyingMagicWeapon(new Mjollnir()); + flyingMagicWeapon.wield(); + flyingMagicWeapon.fly(); + flyingMagicWeapon.swing(); + flyingMagicWeapon.unwield(); + + SoulEatingMagicWeapon soulEatingMagicWeapon = new SoulEatingMagicWeapon(new Stormbringer()); + soulEatingMagicWeapon.wield(); + soulEatingMagicWeapon.swing(); + soulEatingMagicWeapon.eatSoul(); + soulEatingMagicWeapon.unwield(); + + } +} diff --git a/bridge/src/main/java/com/iluwatar/BlindingMagicWeapon.java b/bridge/src/main/java/com/iluwatar/BlindingMagicWeapon.java new file mode 100644 index 000000000..9e61acfb2 --- /dev/null +++ b/bridge/src/main/java/com/iluwatar/BlindingMagicWeapon.java @@ -0,0 +1,33 @@ +package com.iluwatar; + +public class BlindingMagicWeapon extends MagicWeapon { + + public BlindingMagicWeapon(BlindingMagicWeaponImp imp) { + super(imp); + } + + @Override + public BlindingMagicWeaponImp getImp() { + return (BlindingMagicWeaponImp) imp; + } + + @Override + public void wield() { + getImp().wieldImp(); + } + + @Override + public void swing() { + getImp().swingImp(); + } + + @Override + public void unwield() { + getImp().unwieldImp(); + } + + public void blind() { + getImp().blindImp(); + } + +} diff --git a/bridge/src/main/java/com/iluwatar/BlindingMagicWeaponImp.java b/bridge/src/main/java/com/iluwatar/BlindingMagicWeaponImp.java new file mode 100644 index 000000000..5f8cc7bb7 --- /dev/null +++ b/bridge/src/main/java/com/iluwatar/BlindingMagicWeaponImp.java @@ -0,0 +1,7 @@ +package com.iluwatar; + +public abstract class BlindingMagicWeaponImp extends MagicWeaponImp { + + public abstract void blindImp(); + +} diff --git a/bridge/src/main/java/com/iluwatar/Excalibur.java b/bridge/src/main/java/com/iluwatar/Excalibur.java new file mode 100644 index 000000000..83f3e02ac --- /dev/null +++ b/bridge/src/main/java/com/iluwatar/Excalibur.java @@ -0,0 +1,25 @@ +package com.iluwatar; + +public class Excalibur extends BlindingMagicWeaponImp { + + @Override + public void wieldImp() { + System.out.println("wielding Excalibur"); + } + + @Override + public void swingImp() { + System.out.println("swinging Excalibur"); + } + + @Override + public void unwieldImp() { + System.out.println("unwielding Excalibur"); + } + + @Override + public void blindImp() { + System.out.println("bright light streams from Excalibur blinding the enemy"); + } + +} diff --git a/bridge/src/main/java/com/iluwatar/FlyingMagicWeapon.java b/bridge/src/main/java/com/iluwatar/FlyingMagicWeapon.java new file mode 100644 index 000000000..2912cb7fc --- /dev/null +++ b/bridge/src/main/java/com/iluwatar/FlyingMagicWeapon.java @@ -0,0 +1,32 @@ +package com.iluwatar; + +public class FlyingMagicWeapon extends MagicWeapon { + + public FlyingMagicWeapon(FlyingMagicWeaponImp imp) { + super(imp); + } + + public FlyingMagicWeaponImp getImp() { + return (FlyingMagicWeaponImp) imp; + } + + @Override + public void wield() { + getImp().wieldImp(); + } + + @Override + public void swing() { + getImp().swingImp(); + } + + @Override + public void unwield() { + getImp().unwieldImp(); + } + + public void fly() { + getImp().flyImp(); + } + +} diff --git a/bridge/src/main/java/com/iluwatar/FlyingMagicWeaponImp.java b/bridge/src/main/java/com/iluwatar/FlyingMagicWeaponImp.java new file mode 100644 index 000000000..5860f110d --- /dev/null +++ b/bridge/src/main/java/com/iluwatar/FlyingMagicWeaponImp.java @@ -0,0 +1,7 @@ +package com.iluwatar; + +public abstract class FlyingMagicWeaponImp extends MagicWeaponImp { + + public abstract void flyImp(); + +} diff --git a/bridge/src/main/java/com/iluwatar/MagicWeapon.java b/bridge/src/main/java/com/iluwatar/MagicWeapon.java new file mode 100644 index 000000000..cddb00e9c --- /dev/null +++ b/bridge/src/main/java/com/iluwatar/MagicWeapon.java @@ -0,0 +1,21 @@ +package com.iluwatar; + +public abstract class MagicWeapon { + + protected MagicWeaponImp imp; + + public MagicWeapon(MagicWeaponImp imp) { + this.imp = imp; + } + + public abstract void wield(); + + public abstract void swing(); + + public abstract void unwield(); + + public MagicWeaponImp getImp() { + return imp; + } + +} diff --git a/bridge/src/main/java/com/iluwatar/MagicWeaponImp.java b/bridge/src/main/java/com/iluwatar/MagicWeaponImp.java new file mode 100644 index 000000000..99ec57b44 --- /dev/null +++ b/bridge/src/main/java/com/iluwatar/MagicWeaponImp.java @@ -0,0 +1,11 @@ +package com.iluwatar; + +public abstract class MagicWeaponImp { + + public abstract void wieldImp(); + + public abstract void swingImp(); + + public abstract void unwieldImp(); + +} diff --git a/bridge/src/main/java/com/iluwatar/Mjollnir.java b/bridge/src/main/java/com/iluwatar/Mjollnir.java new file mode 100644 index 000000000..4ba68ab6c --- /dev/null +++ b/bridge/src/main/java/com/iluwatar/Mjollnir.java @@ -0,0 +1,25 @@ +package com.iluwatar; + +public class Mjollnir extends FlyingMagicWeaponImp { + + @Override + public void wieldImp() { + System.out.println("wielding Mjollnir"); + } + + @Override + public void swingImp() { + System.out.println("swinging Mjollnir"); + } + + @Override + public void unwieldImp() { + System.out.println("unwielding Mjollnir"); + } + + @Override + public void flyImp() { + System.out.println("Mjollnir hits the enemy in the air and returns back to the owner's hand"); + } + +} diff --git a/bridge/src/main/java/com/iluwatar/SoulEatingMagicWeapon.java b/bridge/src/main/java/com/iluwatar/SoulEatingMagicWeapon.java new file mode 100644 index 000000000..20e55294e --- /dev/null +++ b/bridge/src/main/java/com/iluwatar/SoulEatingMagicWeapon.java @@ -0,0 +1,33 @@ +package com.iluwatar; + +public class SoulEatingMagicWeapon extends MagicWeapon { + + public SoulEatingMagicWeapon(SoulEatingMagicWeaponImp imp) { + super(imp); + } + + @Override + public SoulEatingMagicWeaponImp getImp() { + return (SoulEatingMagicWeaponImp) imp; + } + + @Override + public void wield() { + getImp().wieldImp(); + } + + @Override + public void swing() { + getImp().swingImp(); + } + + @Override + public void unwield() { + getImp().unwieldImp(); + } + + public void eatSoul() { + getImp().eatSoulImp(); + } + +} diff --git a/bridge/src/main/java/com/iluwatar/SoulEatingMagicWeaponImp.java b/bridge/src/main/java/com/iluwatar/SoulEatingMagicWeaponImp.java new file mode 100644 index 000000000..761a1a874 --- /dev/null +++ b/bridge/src/main/java/com/iluwatar/SoulEatingMagicWeaponImp.java @@ -0,0 +1,7 @@ +package com.iluwatar; + +public abstract class SoulEatingMagicWeaponImp extends MagicWeaponImp { + + public abstract void eatSoulImp(); + +} diff --git a/bridge/src/main/java/com/iluwatar/Stormbringer.java b/bridge/src/main/java/com/iluwatar/Stormbringer.java new file mode 100644 index 000000000..673ed99a7 --- /dev/null +++ b/bridge/src/main/java/com/iluwatar/Stormbringer.java @@ -0,0 +1,25 @@ +package com.iluwatar; + +public class Stormbringer extends SoulEatingMagicWeaponImp { + + @Override + public void wieldImp() { + System.out.println("wielding Stormbringer"); + } + + @Override + public void swingImp() { + System.out.println("swinging Stormbringer"); + } + + @Override + public void unwieldImp() { + System.out.println("unwielding Stormbringer"); + } + + @Override + public void eatSoulImp() { + System.out.println("Stormbringer devours the enemy's soul"); + } + +} diff --git a/pom.xml b/pom.xml index cf60e3c74..2deb6ce3a 100644 --- a/pom.xml +++ b/pom.xml @@ -24,5 +24,6 @@ prototype singleton adapter + bridge \ No newline at end of file