首先,我们要做一个枪击的游戏,由于枪有多种不同功能。所以,我们需要创建多个不同特点的枪去装饰。这样我们的子类就会比较臃肿。所以采用装饰者可以很好的解决这个问题。
public interface Gun {
/***
* 瞄准
*/
public void aim();
/**
* 射击
*/
public void shoot();
/**
* 装弹
*/
public void load();
/***
*
*/
public void unload();
}
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射击中
通过上面,我们定义一个接口,然后抽象类抽取去装饰者基础功能,然后每个装饰的类去继承抽象类。
就可以通过new对象不断的创建一个新的类。是不是很舒服。
好了 下面就是一个类图。
本文地址:https://blog.csdn.net/jia970426/article/details/107330273
如对本文有疑问, 点击进行留言回复!!
【面试题】研究过tomcat的NioEndpoint源码吗?请阐述下Reactor多线程模型在tomcat中的实现。
荐 厉害了!阿里P8架构师用4大技术文档带你深入解读爆火的中台战略
网友评论