【设计模式】装饰者模式-接口形式
程序员文章站
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
下一篇: sass和stylus1px解决方案