乒乓球世界杯_世界杯结束时间 - 0123838.com
首页中国篮球世界杯正文

装饰器模式

2025-06-30 03:26:14

复杂些的实例

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

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这不是小明 这不是小明

xia***ng.chn@foxmail.com

6年前 (2019-02-20)

[问题]键盘上好像没有叫super的键吧,哪个是super键 牧泊瑄陆景臣小说已完结 《所幸流年遇到你》最新章节
相关内容