复杂些的实例
在《绝地求生:刺激战场》游戏里面我们都知道。
- Kar 98K有5发子弹;
- 装上弹匣后有10发子弹;
- 装上4倍镜后可以进行4倍瞄准;
- 装上8倍镜后可以进行4倍瞄准、8倍瞄准。
枪具有开火功能:
public interface Gun { / * 开火直至打空子弹 */ public void fire(); } public class Kar98K implements Gun { @Override public void fire() { System.out.println("砰*5"); } }
装饰上弹匣变更枪开火功能:
public abstract class AbstractMagazine implements Gun { private Gun gun; public AbstractMagazine(Gun gun) { this.gun = gun; } @Override public void fire() { gun.fire(); } } public class Magazine extends AbstractMagazine { public Magazine(Gun gun) { super(gun); } @Override public void fire() { System.out.println("砰*10"); } }
测试:
public class Demo { public static void main(String[] args) { System.out.println("[捡起一把98K]"); Gun gun = new Kar98K(); System.out.println("[开炮!]"); gun.fire(); System.out.println("[装饰上弹匣]"); gun = new Magazine(gun); System.out.println("[开炮!]"); gun.fire(); } }
输出:
[捡起一把98K] [开炮!] 砰*5 [装饰上弹匣] [开炮!] 砰*10
现在我要装上4倍镜,使它具有4倍瞄准功能,这是枪支原本没有的功能。
扩展枪支接口功能:
public interface Aim4X extends Gun { public void aim4X(); } public abstract class AbstractTelescope4X implements Aim4X { private Gun gun; public AbstractTelescope4X(Gun gun) { this.gun = gun; } @Override public void fire() { gun.fire(); } } public class Telescope4X extends AbstractTelescope4X { public Telescope4X(Gun gun) { super(gun); } @Override public void aim4X() { System.out.println("已进入4倍瞄准模式"); } } / * 55式4倍镜 */ public class Telescope4X55 extends AbstractTelescope4X { public Telescope4X55(Gun gun) { super(gun); } @Override public void aim4X() { System.out.println("4倍超级瞄准已部署"); } }
测试:
public class Demo { public static void main(String[] args) { System.out.println("[捡起一把98K]"); Gun gun = new Kar98K(); System.out.println("[装饰上4倍镜]"); Aim4X aim4X = new Telescope4X(gun); System.out.println("[4倍瞄准]"); aim4X.aim4X(); System.out.println("[开炮!]"); aim4X.fire(); System.out.println("[先装饰上弹匣]"); gun = new Magazine(gun); System.out.println("[再装饰上4倍镜]"); aim4X = new Telescope4X(gun); System.out.println("[4倍瞄准]"); aim4X.aim4X(); System.out.println("[开炮!]"); aim4X.fire(); System.out.println("[人体描边?换上我的55式4倍镜]"); aim4X = new Telescope4X55(gun); System.out.println("[4倍瞄准]"); aim4X.aim4X(); System.out.println("[开炮!]"); aim4X.fire(); } }
输出:
[捡起一把98K] [装饰上4倍镜] [4倍瞄准] 已进入4倍瞄准模式 [开炮!] 砰*5 [先装饰上弹匣] [再装饰上4倍镜] [4倍瞄准] 已进入4倍瞄准模式 [开炮!] 砰*10 [人体描边?换上我的55式4倍镜] [4倍瞄准] 4倍超级瞄准已部署 [开炮!] 砰*10
现在我要装上8倍镜,它具有4倍瞄准功能,也具有8倍瞄准功能。
扩展接口:
public interface Aim8X extends Aim4X { public void aim8X(); } public abstract class AbstractTelescope8X implements Aim8X { private Gun gun; public AbstractTelescope8X(Gun gun) { this.gun = gun; } @Override public void fire() { gun.fire(); } } public class Telescope8X extends AbstractTelescope8X { public Telescope8X(Gun gun) { super(gun); } @Override public void aim8X() { System.out.println("进入8倍瞄准模式"); } @Override public void aim4X() { System.out.println("进入4倍瞄准模式"); } }
测试:
public class Demo { public static void main(String[] args) { System.out.println("[先装饰上弹匣]"); gun = new Magazine(gun); System.out.println("[再装饰上8倍镜]"); aim8X = new Telescope8X(gun); System.out.println("[8倍瞄准]"); aim8X.aim8X(); System.out.println("[敌人很近,换4倍]"); aim8X.aim4X(); System.out.println("[开炮!]"); aim8X.fire(); } }
输出:
[先装饰上弹匣] [再装饰上8倍镜] [8倍瞄准] 进入8倍瞄准模式 [敌人很近,换4倍]
进入4倍瞄准模式
[开炮!]
砰*10
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/java-jiao-cheng/17876.html