java设计模式进阶_bridge

本文介绍了一种使用设计模式创建魔法武器的Java实现方法。通过桥接模式分离了魔法武器的行为和其实现细节,使得不同类型的魔法武器(如灵魂吞噬、致盲和飞行)可以独立变化并组合使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : MagicWeaponImp.java
//  @ Date : 2016/8/24
//  @ Author : 
//
//




public abstract class MagicWeaponImp {
    public abstract void wieldImp();
    public abstract void swingImp();
    public abstract void unwieldImp();
}

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : SoulEatingMagicWeaponImp.java
//  @ Date : 2016/8/24
//  @ Author : 
//
//




public abstract class SoulEatingMagicWeaponImp extends MagicWeaponImp {
    public abstract void eatSoulImp();
}


//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : BlindingMagicWeaponImp.java
//  @ Date : 2016/8/24
//  @ Author : 
//
//




public abstract class BlindingMagicWeaponImp extends MagicWeaponImp {
    public abstract void blindImp();

}
//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : FlyingMagicWeaponImp.java
//  @ Date : 2016/8/24
//  @ Author : 
//
//




public abstract class FlyingMagicWeaponImp extends MagicWeaponImp {
    public abstract void flyImp();
}
//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : Stormbringer.java
//  @ Date : 2016/8/24
//  @ Author : 
//
//




public class Stormbringer extends SoulEatingMagicWeaponImp {


    public void wieldImp() {//兴风者
        System.out.println("wielding Stormbringer");
    }

    public void swingImp() {
        System.out.println("swinging Stormbringer");
    }

    public void unwieldImp() {
        System.out.println("unwielding Stormbringer");
    }

    public void eatSoulImp() {
        System.out.println("Stormbringer devours the enemy's soul");
    }
}

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : Excalibur.java
//  @ Date : 2016/8/24
//  @ Author : 
//
//



//王者之剑
public class Excalibur extends BlindingMagicWeaponImp {


    public void wieldImp() {//运用王者之剑
        System.out.println("wielding Excalibur");
    }

    public void swingImp() {
        System.out.println("swinging Excalibur");
    }

    public void unwieldImp() {
        System.out.println("unwielding Excalibur");
    }

    public void blindImp() { 
        System.out.println("bright light streams from Excalibur blinding the enemy");
    }
}
//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : MjolInir.java
//  @ Date : 2016/8/24
//  @ Author : 
//
//




public class Mjollnir extends FlyingMagicWeaponImp {


    public void wieldImp() {//雷神之锤
        System.out.println("wielding Mjollnir");
    }

    public void swingImp() {
        System.out.println("swinging Mjollnir");
    }

    public void unwieldImp() {
        System.out.println("unwielding Mjollnir");
    }

    public void flyImp() {
        System.out.println("Mjollnir hits the enemy in the air and returns back to the owner's hand");
    }
}


//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : MagicWeapon.java
//  @ Date : 2016/8/24
//  @ Author : 
//
//




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

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : SoulEatingMagicWeapon.java
//  @ Date : 2016/8/24
//  @ Author : 
//
//




public class SoulEatingMagicWeapon extends MagicWeapon {
    public SoulEatingMagicWeapon(SoulEatingMagicWeaponImp imp) {
        super(imp);
    }

    @Override
    public SoulEatingMagicWeaponImp getImp() {
        return (SoulEatingMagicWeaponImp)imp;
    }

    public void eatSoul() {
        getImp().eatSoulImp();
    }

    public void wield() {
        getImp().wieldImp();
    }

    public void swing() {
        getImp().swingImp();
    }

    public void unwield() {
        getImp().unwieldImp();
    }
}

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : BlindingMagicWeapon.java
//  @ Date : 2016/8/24
//  @ Author : 
//
//




public class BlindingMagicWeapon extends MagicWeapon {
    public BlindingMagicWeapon(BlindingMagicWeaponImp imp) {
        super(imp);
    }

    @Override
    public BlindingMagicWeaponImp getImp() {
        return (BlindingMagicWeaponImp)imp;
    }

    public void blind() {
        getImp().blindImp();
    }

    public void wield() {
        getImp().wieldImp();
    }

    public void swing() {
        getImp().swingImp();
    }

    public void unwield() {
        getImp().unwieldImp();
    }
}

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : FlyingMagicWeapon.java
//  @ Date : 2016/8/24
//  @ Author : 
//
//




public class FlyingMagicWeapon extends MagicWeapon {
    public FlyingMagicWeapon(FlyingMagicWeaponImp imp) {
        super(imp);
    }

    @Override
    public FlyingMagicWeaponImp getImp() {
        return (FlyingMagicWeaponImp)imp;
    }

    public void fly() {
        getImp().flyImp();
    }

    public void wield() {
        getImp().wieldImp();
    }

    public void swing() {
        getImp().swingImp();
    }

    public void unwield() {
        getImp().unwieldImp();
    }
}

/*
 * 在桥接模式两个抽象的(MagicWeapon)和实现了
 * (MagicWeaponImp)有它们自己类的继承结构.这个接口实现
 * 能被改变外部影响客户端的使用.
 * 
 */
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();
    }

}
/*
wielding Excalibur
bright light streams from Excalibur blinding the enemy
swinging Excalibur
unwielding Excalibur
wielding Mjollnir
Mjollnir hits the enemy in the air and returns back to the owner's hand
swinging Mjollnir
unwielding Mjollnir
wielding Stormbringer
swinging Stormbringer
Stormbringer devours the enemy's soul
unwielding Stormbringer

*/






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值