Reformat bridge design pattern - Issue #224

This commit is contained in:
Ankur Kaushal 2015-11-01 17:43:54 -05:00
parent 16a8c85af6
commit e7b6542134
13 changed files with 161 additions and 171 deletions

View File

@ -2,41 +2,38 @@ package com.iluwatar.bridge;
/** /**
* *
* The Bridge pattern can also be thought of as two layers of abstraction. With Bridge, * The Bridge pattern can also be thought of as two layers of abstraction. With Bridge, you can
* you can decouple an abstraction from its implementation so that the two can vary independently. * decouple an abstraction from its implementation so that the two can vary independently.
* <p> * <p>
* In Bridge pattern both abstraction ({@link MagicWeapon}) and implementation * In Bridge pattern both abstraction ({@link MagicWeapon}) and implementation (
* ({@link MagicWeaponImpl}) have their own class hierarchies. The interface of the * {@link MagicWeaponImpl}) have their own class hierarchies. The interface of the implementations
* implementations can be changed without affecting the clients. * can be changed without affecting the clients.
* *
*/ */
public class App { public class App {
/** /**
* Program entry point * Program entry point
* @param args command line args *
*/ * @param args command line args
public static void main(String[] args) { */
BlindingMagicWeapon blindingMagicWeapon = new BlindingMagicWeapon( public static void main(String[] args) {
new Excalibur()); BlindingMagicWeapon blindingMagicWeapon = new BlindingMagicWeapon(new Excalibur());
blindingMagicWeapon.wield(); blindingMagicWeapon.wield();
blindingMagicWeapon.blind(); blindingMagicWeapon.blind();
blindingMagicWeapon.swing(); blindingMagicWeapon.swing();
blindingMagicWeapon.unwield(); blindingMagicWeapon.unwield();
FlyingMagicWeapon flyingMagicWeapon = new FlyingMagicWeapon( FlyingMagicWeapon flyingMagicWeapon = new FlyingMagicWeapon(new Mjollnir());
new Mjollnir()); flyingMagicWeapon.wield();
flyingMagicWeapon.wield(); flyingMagicWeapon.fly();
flyingMagicWeapon.fly(); flyingMagicWeapon.swing();
flyingMagicWeapon.swing(); flyingMagicWeapon.unwield();
flyingMagicWeapon.unwield();
SoulEatingMagicWeapon soulEatingMagicWeapon = new SoulEatingMagicWeapon( SoulEatingMagicWeapon soulEatingMagicWeapon = new SoulEatingMagicWeapon(new Stormbringer());
new Stormbringer()); soulEatingMagicWeapon.wield();
soulEatingMagicWeapon.wield(); soulEatingMagicWeapon.swing();
soulEatingMagicWeapon.swing(); soulEatingMagicWeapon.eatSoul();
soulEatingMagicWeapon.eatSoul(); soulEatingMagicWeapon.unwield();
soulEatingMagicWeapon.unwield(); }
}
} }

View File

@ -7,32 +7,31 @@ package com.iluwatar.bridge;
*/ */
public class BlindingMagicWeapon extends MagicWeapon { public class BlindingMagicWeapon extends MagicWeapon {
public BlindingMagicWeapon(BlindingMagicWeaponImpl imp) { public BlindingMagicWeapon(BlindingMagicWeaponImpl imp) {
super(imp); super(imp);
} }
@Override @Override
public BlindingMagicWeaponImpl getImp() { public BlindingMagicWeaponImpl getImp() {
return (BlindingMagicWeaponImpl) imp; return (BlindingMagicWeaponImpl) imp;
} }
@Override @Override
public void wield() { public void wield() {
getImp().wieldImp(); getImp().wieldImp();
} }
@Override @Override
public void swing() { public void swing() {
getImp().swingImp(); getImp().swingImp();
} }
@Override @Override
public void unwield() { public void unwield() {
getImp().unwieldImp(); getImp().unwieldImp();
} }
public void blind() {
getImp().blindImp();
}
public void blind() {
getImp().blindImp();
}
} }

View File

@ -7,6 +7,6 @@ package com.iluwatar.bridge;
*/ */
public abstract class BlindingMagicWeaponImpl extends MagicWeaponImpl { public abstract class BlindingMagicWeaponImpl extends MagicWeaponImpl {
public abstract void blindImp(); public abstract void blindImp();
} }

View File

@ -7,25 +7,23 @@ package com.iluwatar.bridge;
*/ */
public class Excalibur extends BlindingMagicWeaponImpl { public class Excalibur extends BlindingMagicWeaponImpl {
@Override @Override
public void wieldImp() { public void wieldImp() {
System.out.println("wielding Excalibur"); System.out.println("wielding Excalibur");
} }
@Override @Override
public void swingImp() { public void swingImp() {
System.out.println("swinging Excalibur"); System.out.println("swinging Excalibur");
} }
@Override @Override
public void unwieldImp() { public void unwieldImp() {
System.out.println("unwielding Excalibur"); System.out.println("unwielding Excalibur");
} }
@Override
public void blindImp() {
System.out
.println("bright light streams from Excalibur blinding the enemy");
}
@Override
public void blindImp() {
System.out.println("bright light streams from Excalibur blinding the enemy");
}
} }

View File

@ -7,31 +7,31 @@ package com.iluwatar.bridge;
*/ */
public class FlyingMagicWeapon extends MagicWeapon { public class FlyingMagicWeapon extends MagicWeapon {
public FlyingMagicWeapon(FlyingMagicWeaponImpl imp) { public FlyingMagicWeapon(FlyingMagicWeaponImpl imp) {
super(imp); super(imp);
} }
public FlyingMagicWeaponImpl getImp() { public FlyingMagicWeaponImpl getImp() {
return (FlyingMagicWeaponImpl) imp; return (FlyingMagicWeaponImpl) imp;
} }
@Override @Override
public void wield() { public void wield() {
getImp().wieldImp(); getImp().wieldImp();
} }
@Override @Override
public void swing() { public void swing() {
getImp().swingImp(); getImp().swingImp();
} }
@Override @Override
public void unwield() { public void unwield() {
getImp().unwieldImp(); getImp().unwieldImp();
} }
public void fly() { public void fly() {
getImp().flyImp(); getImp().flyImp();
} }
} }

View File

@ -7,6 +7,6 @@ package com.iluwatar.bridge;
*/ */
public abstract class FlyingMagicWeaponImpl extends MagicWeaponImpl { public abstract class FlyingMagicWeaponImpl extends MagicWeaponImpl {
public abstract void flyImp(); public abstract void flyImp();
} }

View File

@ -7,20 +7,19 @@ package com.iluwatar.bridge;
*/ */
public abstract class MagicWeapon { public abstract class MagicWeapon {
protected MagicWeaponImpl imp; protected MagicWeaponImpl imp;
public MagicWeapon(MagicWeaponImpl imp) { public MagicWeapon(MagicWeaponImpl imp) {
this.imp = imp; this.imp = imp;
} }
public abstract void wield(); public abstract void wield();
public abstract void swing(); public abstract void swing();
public abstract void unwield(); public abstract void unwield();
public MagicWeaponImpl getImp() {
return imp;
}
public MagicWeaponImpl getImp() {
return imp;
}
} }

View File

@ -7,10 +7,10 @@ package com.iluwatar.bridge;
*/ */
public abstract class MagicWeaponImpl { public abstract class MagicWeaponImpl {
public abstract void wieldImp(); public abstract void wieldImp();
public abstract void swingImp(); public abstract void swingImp();
public abstract void unwieldImp(); public abstract void unwieldImp();
} }

View File

@ -7,25 +7,23 @@ package com.iluwatar.bridge;
*/ */
public class Mjollnir extends FlyingMagicWeaponImpl { public class Mjollnir extends FlyingMagicWeaponImpl {
@Override @Override
public void wieldImp() { public void wieldImp() {
System.out.println("wielding Mjollnir"); System.out.println("wielding Mjollnir");
} }
@Override @Override
public void swingImp() { public void swingImp() {
System.out.println("swinging Mjollnir"); System.out.println("swinging Mjollnir");
} }
@Override @Override
public void unwieldImp() { public void unwieldImp() {
System.out.println("unwielding Mjollnir"); 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");
}
@Override
public void flyImp() {
System.out.println("Mjollnir hits the enemy in the air and returns back to the owner's hand");
}
} }

View File

@ -7,32 +7,32 @@ package com.iluwatar.bridge;
*/ */
public class SoulEatingMagicWeapon extends MagicWeapon { public class SoulEatingMagicWeapon extends MagicWeapon {
public SoulEatingMagicWeapon(SoulEatingMagicWeaponImpl imp) { public SoulEatingMagicWeapon(SoulEatingMagicWeaponImpl imp) {
super(imp); super(imp);
} }
@Override @Override
public SoulEatingMagicWeaponImpl getImp() { public SoulEatingMagicWeaponImpl getImp() {
return (SoulEatingMagicWeaponImpl) imp; return (SoulEatingMagicWeaponImpl) imp;
} }
@Override @Override
public void wield() { public void wield() {
getImp().wieldImp(); getImp().wieldImp();
} }
@Override @Override
public void swing() { public void swing() {
getImp().swingImp(); getImp().swingImp();
} }
@Override @Override
public void unwield() { public void unwield() {
getImp().unwieldImp(); getImp().unwieldImp();
} }
public void eatSoul() { public void eatSoul() {
getImp().eatSoulImp(); getImp().eatSoulImp();
} }
} }

View File

@ -7,6 +7,6 @@ package com.iluwatar.bridge;
*/ */
public abstract class SoulEatingMagicWeaponImpl extends MagicWeaponImpl { public abstract class SoulEatingMagicWeaponImpl extends MagicWeaponImpl {
public abstract void eatSoulImp(); public abstract void eatSoulImp();
} }

View File

@ -7,24 +7,23 @@ package com.iluwatar.bridge;
*/ */
public class Stormbringer extends SoulEatingMagicWeaponImpl { public class Stormbringer extends SoulEatingMagicWeaponImpl {
@Override @Override
public void wieldImp() { public void wieldImp() {
System.out.println("wielding Stormbringer"); System.out.println("wielding Stormbringer");
} }
@Override @Override
public void swingImp() { public void swingImp() {
System.out.println("swinging Stormbringer"); System.out.println("swinging Stormbringer");
} }
@Override @Override
public void unwieldImp() { public void unwieldImp() {
System.out.println("unwielding Stormbringer"); System.out.println("unwielding Stormbringer");
} }
@Override
public void eatSoulImp() {
System.out.println("Stormbringer devours the enemy's soul");
}
@Override
public void eatSoulImp() {
System.out.println("Stormbringer devours the enemy's soul");
}
} }

View File

@ -11,9 +11,9 @@ import com.iluwatar.bridge.App;
*/ */
public class AppTest { public class AppTest {
@Test @Test
public void test() { public void test() {
String[] args = {}; String[] args = {};
App.main(args); App.main(args);
} }
} }