当前位置:网站首页 > Java教程 > 正文

java装饰模式教程



复杂些的实例

在《绝地求生:刺激战场》游戏里面我们都知道。

  • 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

版权声明


相关文章:

  • 公众号开发教程java2024-11-20 13:18:01
  • java喂养教程2024-11-20 13:18:01
  • 自动推断java教程2024-11-20 13:18:01
  • java状态模式教程2024-11-20 13:18:01
  • java47使用教程2024-11-20 13:18:01
  • java项目实训教程2024-11-20 13:18:01
  • 18版JAVA实验教程2024-11-20 13:18:01
  • Java Web应用开发教程2024-11-20 13:18:01
  • java入门教程4312024-11-20 13:18:01
  • java教程郑2024-11-20 13:18:01