当前位置: 移动技术网 > IT编程>软件设计>设计模式 > 【设计模式】装饰者模式-接口形式

【设计模式】装饰者模式-接口形式

2020年07月15日  | 移动技术网IT编程  | 我要评论

1.问题

首先,我们要做一个枪击的游戏,由于枪有多种不同功能。所以,我们需要创建多个不同特点的枪去装饰。这样我们的子类就会比较臃肿。所以采用装饰者可以很好的解决这个问题。

2.code

定义一个接口类型的Gun

public interface Gun {

    /***
     * 瞄准
     */
    public void aim();


    /**
     * 射击
     */
    public void shoot();


    /**
     * 装弹
     */
    public void load();

    /***
     *
     */
    public void unload();
}

定义子类Ak47

public class AK47 implements Gun {

    @Override
    public void aim() {
        System.out.println("ak47 瞄准中");
    }

    @Override
    public void shoot() {
        System.out.println("ak47射击中");
    }

    @Override
    public void load() {
        System.out.println("ak47装弹中");
    }

    @Override
    public void unload() {
        System.out.println("ak47卸弹中");
    }
}

定义一个抽象类基础类

public abstract class WrapperGun implements Gun{

    public Gun gun;

    public WrapperGun(Gun gun) {
        this.gun = gun;
    }

    @Override
    public void aim() {
        gun.aim();
    }

    @Override
    public void shoot() {
        gun.shoot();
    }

    @Override
    public void load() {
        gun.load();
    }

    @Override
    public void unload() {
        gun.unload();
    }

}

瞄准功能的枪

public class MiaozhunGun extends WrapperGun {

    public MiaozhunGun(Gun gun){
        super(gun);
    }

    @Override
    public void aim() {
        System.out.println("好清晰 1000KM");
        super.aim();
    }

}

防抖功能的枪

public class FangdouGun extends WrapperGun{

    public FangdouGun(Gun gun){
        super(gun);
    }

    @Override
    public void shoot() {
        System.out.println("好稳定");
        super.shoot();
    }
}

测试类

	Gun gun = new MiaozhunGun(new FangdouGun(new AK47()));

    gun.aim();
    gun.shoot();

result:=============
好清晰 1000KM
ak47 瞄准中
好稳定
ak47射击中

3.总结

通过上面,我们定义一个接口,然后抽象类抽取去装饰者基础功能,然后每个装饰的类去继承抽象类。
就可以通过new对象不断的创建一个新的类。是不是很舒服。
好了 下面就是一个类图。
在这里插入图片描述

本文地址:https://blog.csdn.net/jia970426/article/details/107330273

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网