欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-18 23:39:02
1.问题首先,我们要做一个枪击的游戏,由于枪有多种不同功能。所以,我们需要创建多个不同特点的枪去装饰。这样我们的子类就会比较臃肿。所以采用装饰者可以很好的解决这个问题。2.code定义一个接口类型的Gunpublic interface Gun { /*** * 瞄准 */ public void aim(); /** * 射击 */ public void shoot(); /** * 装弹...

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