diff --git a/bridge/etc/bridge.png b/bridge/etc/bridge.png index 472fe51e74f5866c2a3c7bf02cca6961aafd7340..00d3e611c1f72e1b3411c3c5b327f81a49f3a78e 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 86455e7fb1d825949f3b06c57240f5c250aaacfb..2eda6e1d1f5ed4b5609a43dfa690f59a50a42539 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 3152efdf66515ce1c87876aa90f49738545cd434..0000000000000000000000000000000000000000 Binary files a/bridge/etc/bridge_1.png and /dev/null differ diff --git a/bridge/index.md b/bridge/index.md index 9983dab40bebf42dbaf4417cb5b101c70cf99a4a..fef4e1789bd35c4858420494b4fa09245a4fca48 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 3797653d458c279fd2307789518ddbbe833c9724..e8774caeab8d50d783ad06fdac2f0572f0cdd1fe 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 5421c6d5ef5c9b41735a5ffe6f7e08f0c1ebda72..bf4bac8f93a88d7a0c973b349e5934ac7b620ede 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 0686ce9177b40d00dffe3ac3313585cdc5c90360..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..31dffb042cd52b7b1be0a050e727f7cc12334cce --- /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 52298c900ac16691697ecbc9d7829c142e01460e..9f7078139cfa026b1a8d86139ad6a414983fecf6 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 9cb1902f9f2793859e80c3ebb0f58bcc730f937f..542e7d97e8743c7fbab8b794ac74a7d7f7598095 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 37fa8a0f9fa365b41f0e3ef690b4774a7aba6833..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..8b7a10f2f219de833d217c0feb0f1fc92bb89eba --- /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 b03435c518e9f9b38cb298197deb6eb94cf285d1..b2b82839c9a64316b6ac1a331f9671a72fa9a99f 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 cf972c115451f6dc75610105bc62bc5da077e5b8..bd2a3b8d7564cdd7605ed4c2249fefa776b35d06 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 0c21f8d077ec1b81cec1b734fc13d44096942689..887173add55b8825466c2e992913e7689a63b13a 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 dbbec102d94f2730eb11e50808fdf444295d6c8f..3310b64889eda5f4e8228216d49c63772b2567e1 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 3c1a557dd46abf692cb7c8875ee0678a0778ea77..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..9ec112031bc9e594f5c1123476d20dc840498948 --- /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 55b5960c9bf534a2c234694b381e1fe3e6800663..589156fe3bef669054184613a10069ea02be569b 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"); + } + +}