added bridge sample

This commit is contained in:
Ilkka Seppala 2014-08-12 23:09:32 +03:00
parent 9ae662943c
commit e5fc439687
14 changed files with 276 additions and 0 deletions

23
bridge/pom.xml Normal file
View File

@ -0,0 +1,23 @@
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.iluwatar</groupId>
<artifactId>bridge</artifactId>
<version>1.0-SNAPSHOT</version>
<name>bridge</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -0,0 +1,7 @@
package com.iluwatar;
public abstract class BlindingMagicWeaponImp extends MagicWeaponImp {
public abstract void blindImp();
}

View File

@ -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");
}
}

View File

@ -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();
}
}

View File

@ -0,0 +1,7 @@
package com.iluwatar;
public abstract class FlyingMagicWeaponImp extends MagicWeaponImp {
public abstract void flyImp();
}

View File

@ -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;
}
}

View File

@ -0,0 +1,11 @@
package com.iluwatar;
public abstract class MagicWeaponImp {
public abstract void wieldImp();
public abstract void swingImp();
public abstract void unwieldImp();
}

View File

@ -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");
}
}

View File

@ -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();
}
}

View File

@ -0,0 +1,7 @@
package com.iluwatar;
public abstract class SoulEatingMagicWeaponImp extends MagicWeaponImp {
public abstract void eatSoulImp();
}

View File

@ -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");
}
}

View File

@ -24,5 +24,6 @@
<module>prototype</module>
<module>singleton</module>
<module>adapter</module>
<module>bridge</module>
</modules>
</project>