package 装饰模式;
// 核心战术
public abstract class MainTactics {
// 进攻
public abstract void attack();
// 是否成功
public abstract void success();
}
package 装饰模式;
//核心业务类
public class CBATactics extends MainTactics {
@Override
public void attack() {
System.out.println("战术: 进攻内线......");
}
@Override
public void success() {
System.out.println("成功80%");
}
}
package 装饰模式;
/**
* 通过这个类来进行 对原始类的一个扩展, 可以即插即用扩展业务感觉。 需要扩展其中的一个业务的时候, 只要继承这个类就可以了。
*
* 不会对原来的有什么影响。 直接扩展,处理业务。
*
*
* ***/
public abstract class TacticsList extends MainTactics {
private MainTactics tactics;
public TacticsList(MainTactics tactics) {
this.tactics = tactics;
}
public void attack() {
this.tactics.attack();
}
@Override
public void success() {
this.tactics.success();
}
}
package 装饰模式;
public class TacticsOne extends TacticsList{
public TacticsOne(MainTactics tactics) {
super(tactics);
}
public void attackOne(){
System.out.println("战术执行,先突破,然后分球给内线");
}
@Override
public void attack() {
super.attack();
this.attackOne();
}
}
package 装饰模式;
public class TacticsTwo extends TacticsList {
public TacticsTwo(MainTactics tactics) {
super(tactics);
}
public void attackTwo() {
System.out.println("内线网外传,直接飙3分");
}
@Override
public void attack() {
super.attack();
this.attackTwo();
}
}
package 装饰模式;
public class Main {
public static void main(String[] args) {
// 下面添加另外一种进攻手段。 (扩展一种另外的业务处理)
MainTactics tactics = new CBATactics(); // 最原始的,最核心业务
tactics = new TacticsOne(tactics); // 直接包装 核心业务 , 在原来的基础上直接添加。 同时又对原来的业务没有任何干扰。
tactics = new TacticsTwo(tactics); // 进行再次的包装业务,处理业务。
tactics.attack();
}
}