diff --git a/bridge/etc/bridge.png b/bridge/etc/bridge.png index 472fe51e7..00d3e611c 100644 Binary files a/bridge/etc/bridge.png and b/bridge/etc/bridge.png differ diff --git a/bridge/etc/bridge.ucls b/bridge/etc/bridge.ucls index 86455e7fb..2eda6e1d1 100644 --- a/bridge/etc/bridge.ucls +++ b/bridge/etc/bridge.ucls @@ -1,18 +1,18 @@ - - + + - - + + @@ -21,25 +21,25 @@ - + - - + + - - + + @@ -48,7 +48,7 @@ - + @@ -57,7 +57,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -75,7 +75,7 @@ - + @@ -84,7 +84,7 @@ - + @@ -93,7 +93,7 @@ - + @@ -101,48 +101,52 @@ - - + + - - - - - - - - - - - - - - - + + + - + - - + + + + + + - + + + + + + + + + + + + + - - + + diff --git a/bridge/etc/bridge_1.png b/bridge/etc/bridge_1.png deleted file mode 100644 index 3152efdf6..000000000 Binary files a/bridge/etc/bridge_1.png and /dev/null differ diff --git a/bridge/index.md b/bridge/index.md index 9983dab40..fef4e1789 100644 --- a/bridge/index.md +++ b/bridge/index.md @@ -11,7 +11,7 @@ tags: pattern_tag vary independently. -![alt text](./etc/bridge_1.png "Bridge") +![alt text](./etc/bridge.png "Bridge") **Applicability:** Use the Bridge pattern when diff --git a/bridge/src/main/java/com/iluwatar/bridge/App.java b/bridge/src/main/java/com/iluwatar/bridge/App.java index 3797653d4..e8774caea 100644 --- a/bridge/src/main/java/com/iluwatar/bridge/App.java +++ b/bridge/src/main/java/com/iluwatar/bridge/App.java @@ -1,35 +1,39 @@ -package com.iluwatar.bridge; - -/** - * - * In Bridge pattern both abstraction (MagicWeapon) and implementation - * (MagicWeaponImp) have their own class hierarchies. The interface of the - * implementations can be changed without affecting the clients. - * - */ -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(); - - } -} +package com.iluwatar.bridge; + +/** + * + * In Bridge pattern both abstraction ({@link MagicWeapon}) and implementation + * ({@link MagicWeaponImpl}) have their own class hierarchies. The interface of the + * implementations can be changed without affecting the clients. + * + */ +public class App { + + /** + * Program entry point + * @param args command line args + */ + 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/bridge/BlindingMagicWeapon.java b/bridge/src/main/java/com/iluwatar/bridge/BlindingMagicWeapon.java index 5421c6d5e..bf4bac8f9 100644 --- a/bridge/src/main/java/com/iluwatar/bridge/BlindingMagicWeapon.java +++ b/bridge/src/main/java/com/iluwatar/bridge/BlindingMagicWeapon.java @@ -1,33 +1,38 @@ -package com.iluwatar.bridge; - -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(); - } - -} +package com.iluwatar.bridge; + +/** + * + * BlindingMagicWeapon + * + */ +public class BlindingMagicWeapon extends MagicWeapon { + + public BlindingMagicWeapon(BlindingMagicWeaponImpl imp) { + super(imp); + } + + @Override + public BlindingMagicWeaponImpl getImp() { + return (BlindingMagicWeaponImpl) 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/bridge/BlindingMagicWeaponImp.java b/bridge/src/main/java/com/iluwatar/bridge/BlindingMagicWeaponImp.java deleted file mode 100644 index 0686ce917..000000000 --- a/bridge/src/main/java/com/iluwatar/bridge/BlindingMagicWeaponImp.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.iluwatar.bridge; - -public abstract class BlindingMagicWeaponImp extends MagicWeaponImp { - - public abstract void blindImp(); - -} diff --git a/bridge/src/main/java/com/iluwatar/bridge/BlindingMagicWeaponImpl.java b/bridge/src/main/java/com/iluwatar/bridge/BlindingMagicWeaponImpl.java new file mode 100644 index 000000000..31dffb042 --- /dev/null +++ b/bridge/src/main/java/com/iluwatar/bridge/BlindingMagicWeaponImpl.java @@ -0,0 +1,12 @@ +package com.iluwatar.bridge; + +/** + * + * BlindingMagicWeaponImpl + * + */ +public abstract class BlindingMagicWeaponImpl extends MagicWeaponImpl { + + public abstract void blindImp(); + +} diff --git a/bridge/src/main/java/com/iluwatar/bridge/Excalibur.java b/bridge/src/main/java/com/iluwatar/bridge/Excalibur.java index 52298c900..9f7078139 100644 --- a/bridge/src/main/java/com/iluwatar/bridge/Excalibur.java +++ b/bridge/src/main/java/com/iluwatar/bridge/Excalibur.java @@ -1,26 +1,31 @@ -package com.iluwatar.bridge; - -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"); - } - -} +package com.iluwatar.bridge; + +/** + * + * Excalibur + * + */ +public class Excalibur extends BlindingMagicWeaponImpl { + + @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/bridge/FlyingMagicWeapon.java b/bridge/src/main/java/com/iluwatar/bridge/FlyingMagicWeapon.java index 9cb1902f9..542e7d97e 100644 --- a/bridge/src/main/java/com/iluwatar/bridge/FlyingMagicWeapon.java +++ b/bridge/src/main/java/com/iluwatar/bridge/FlyingMagicWeapon.java @@ -1,32 +1,37 @@ -package com.iluwatar.bridge; - -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(); - } - -} +package com.iluwatar.bridge; + +/** + * + * FlyingMagicWeapon + * + */ +public class FlyingMagicWeapon extends MagicWeapon { + + public FlyingMagicWeapon(FlyingMagicWeaponImpl imp) { + super(imp); + } + + public FlyingMagicWeaponImpl getImp() { + return (FlyingMagicWeaponImpl) 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/bridge/FlyingMagicWeaponImp.java b/bridge/src/main/java/com/iluwatar/bridge/FlyingMagicWeaponImp.java deleted file mode 100644 index 37fa8a0f9..000000000 --- a/bridge/src/main/java/com/iluwatar/bridge/FlyingMagicWeaponImp.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.iluwatar.bridge; - -public abstract class FlyingMagicWeaponImp extends MagicWeaponImp { - - public abstract void flyImp(); - -} diff --git a/bridge/src/main/java/com/iluwatar/bridge/FlyingMagicWeaponImpl.java b/bridge/src/main/java/com/iluwatar/bridge/FlyingMagicWeaponImpl.java new file mode 100644 index 000000000..8b7a10f2f --- /dev/null +++ b/bridge/src/main/java/com/iluwatar/bridge/FlyingMagicWeaponImpl.java @@ -0,0 +1,12 @@ +package com.iluwatar.bridge; + +/** + * + * FlyingMagicWeaponImpl + * + */ +public abstract class FlyingMagicWeaponImpl extends MagicWeaponImpl { + + public abstract void flyImp(); + +} diff --git a/bridge/src/main/java/com/iluwatar/bridge/MagicWeapon.java b/bridge/src/main/java/com/iluwatar/bridge/MagicWeapon.java index b03435c51..b2b82839c 100644 --- a/bridge/src/main/java/com/iluwatar/bridge/MagicWeapon.java +++ b/bridge/src/main/java/com/iluwatar/bridge/MagicWeapon.java @@ -1,26 +1,26 @@ -package com.iluwatar.bridge; - -/** - * - * Abstraction interface. - * - */ -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; - } - -} +package com.iluwatar.bridge; + +/** + * + * MagicWeapon + * + */ +public abstract class MagicWeapon { + + protected MagicWeaponImpl imp; + + public MagicWeapon(MagicWeaponImpl imp) { + this.imp = imp; + } + + public abstract void wield(); + + public abstract void swing(); + + public abstract void unwield(); + + public MagicWeaponImpl getImp() { + return imp; + } + +} diff --git a/bridge/src/main/java/com/iluwatar/bridge/MagicWeaponImp.java b/bridge/src/main/java/com/iluwatar/bridge/MagicWeaponImpl.java similarity index 65% rename from bridge/src/main/java/com/iluwatar/bridge/MagicWeaponImp.java rename to bridge/src/main/java/com/iluwatar/bridge/MagicWeaponImpl.java index cf972c115..bd2a3b8d7 100644 --- a/bridge/src/main/java/com/iluwatar/bridge/MagicWeaponImp.java +++ b/bridge/src/main/java/com/iluwatar/bridge/MagicWeaponImpl.java @@ -1,16 +1,16 @@ -package com.iluwatar.bridge; - -/** - * - * Implementation interface. - * - */ -public abstract class MagicWeaponImp { - - public abstract void wieldImp(); - - public abstract void swingImp(); - - public abstract void unwieldImp(); - -} +package com.iluwatar.bridge; + +/** + * + * MagicWeaponImpl + * + */ +public abstract class MagicWeaponImpl { + + public abstract void wieldImp(); + + public abstract void swingImp(); + + public abstract void unwieldImp(); + +} diff --git a/bridge/src/main/java/com/iluwatar/bridge/Mjollnir.java b/bridge/src/main/java/com/iluwatar/bridge/Mjollnir.java index 0c21f8d07..887173add 100644 --- a/bridge/src/main/java/com/iluwatar/bridge/Mjollnir.java +++ b/bridge/src/main/java/com/iluwatar/bridge/Mjollnir.java @@ -1,26 +1,31 @@ -package com.iluwatar.bridge; - -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"); - } - -} +package com.iluwatar.bridge; + +/** + * + * Mjollnir + * + */ +public class Mjollnir extends FlyingMagicWeaponImpl { + + @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/bridge/SoulEatingMagicWeapon.java b/bridge/src/main/java/com/iluwatar/bridge/SoulEatingMagicWeapon.java index dbbec102d..3310b6488 100644 --- a/bridge/src/main/java/com/iluwatar/bridge/SoulEatingMagicWeapon.java +++ b/bridge/src/main/java/com/iluwatar/bridge/SoulEatingMagicWeapon.java @@ -1,33 +1,38 @@ -package com.iluwatar.bridge; - -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(); - } - -} +package com.iluwatar.bridge; + +/** + * + * SoulEatingMagicWeapon + * + */ +public class SoulEatingMagicWeapon extends MagicWeapon { + + public SoulEatingMagicWeapon(SoulEatingMagicWeaponImpl imp) { + super(imp); + } + + @Override + public SoulEatingMagicWeaponImpl getImp() { + return (SoulEatingMagicWeaponImpl) 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/bridge/SoulEatingMagicWeaponImp.java b/bridge/src/main/java/com/iluwatar/bridge/SoulEatingMagicWeaponImp.java deleted file mode 100644 index 3c1a557dd..000000000 --- a/bridge/src/main/java/com/iluwatar/bridge/SoulEatingMagicWeaponImp.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.iluwatar.bridge; - -public abstract class SoulEatingMagicWeaponImp extends MagicWeaponImp { - - public abstract void eatSoulImp(); - -} diff --git a/bridge/src/main/java/com/iluwatar/bridge/SoulEatingMagicWeaponImpl.java b/bridge/src/main/java/com/iluwatar/bridge/SoulEatingMagicWeaponImpl.java new file mode 100644 index 000000000..9ec112031 --- /dev/null +++ b/bridge/src/main/java/com/iluwatar/bridge/SoulEatingMagicWeaponImpl.java @@ -0,0 +1,12 @@ +package com.iluwatar.bridge; + +/** + * + * SoulEatingMagicWeaponImpl + * + */ +public abstract class SoulEatingMagicWeaponImpl extends MagicWeaponImpl { + + public abstract void eatSoulImp(); + +} diff --git a/bridge/src/main/java/com/iluwatar/bridge/Stormbringer.java b/bridge/src/main/java/com/iluwatar/bridge/Stormbringer.java index 55b5960c9..589156fe3 100644 --- a/bridge/src/main/java/com/iluwatar/bridge/Stormbringer.java +++ b/bridge/src/main/java/com/iluwatar/bridge/Stormbringer.java @@ -1,25 +1,30 @@ -package com.iluwatar.bridge; - -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"); - } - -} +package com.iluwatar.bridge; + +/** + * + * Stormbringer + * + */ +public class Stormbringer extends SoulEatingMagicWeaponImpl { + + @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"); + } + +}