最近有点迷茫,就想着来看些东西吧。java里面的设计模式一直没有系统学习过,就开一篇来学一学。本篇讲的是策略模式。

不看不知道,看了才发现原来好多模式我在实际都用过了,只不过没有这么系统,没有名称。 什么是策略模式呢? 什么是策略呢? 策略嘛,就是不同的问题不同的解决方案呗! 比如他骂我一句,我也得骂回去!他打我一下,我也得打回去! 当然,如果他骂你一句,你要打回去,当我没说。 这就是策略了! 我们考虑下代码! 不管你骂他还是小拳拳锤他胸口,都是一个相应动作对吧,都是属于一个共有的,所以,可以把这个共有的抽象成一个接口,然后不同的操作就来继承实现。 然后,你看啊!这是你想回复别人,万一你想主动招惹别人呢? 所以,我们需要一个东西,能够管理,类似于管家的东西,就直接操作,不管什么内容了。 好了,我们来看下代码。

1
2
3
4
5
package top.txiner.strategy;

public interface Resp {
    public void action();
}

看,你要回复别人抽象出来的套路。

1
2
3
4
5
6
7
package top.txiner.strategy;

public class RespBySwear implements Resp {
    public void action() {
        System.out.println("fxxk you");
    }
}

骂回去!

1
2
3
4
5
6
7
package top.txiner.strategy;

public class RespByHit implements Resp {
    public void action() {
        System.out.println("small fist hammer you chest");
    }
}

不要怂,就是怼! 怎么怼想好了,就得看什么时候怎么怼了!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
package top.txiner.strategy;

public class Handler {
    private Resp resp;

    public Handler(Resp resp) {
        this.resp = resp;
    }

    public void handle() {
        this.resp.action();
    }
}

这个就是直接处理了。我管着这些怼的方式!想怼了,给我说下,没毛病,老铁! 好了,我们来实战下!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
package top.txiner.strategy;

public class People {


    public static void main(String[] args) {
        System.out.println("fxck you!");
        Resp resp = new RespBySwear();
        Handler handler = new Handler(resp);
        handler.handle();
        System.out.println("再瞅下试试!");
        resp = new RespByHit();
        handler = new Handler(resp);
        handler.handle();
    }
}

小明,卒!

------------分割线----------------- 我是用比较奇葩的方式写的,再正规的说下,上面的抽象的对人方式就叫抽象策略角色,具体的怼人方式就叫具体策略角色,说没毛病老铁的就是环境、上下文(context,不好翻译)。 有错误请及时提醒!