小故事: 大雄每次去找静香玩耍的时候都会被胖虎还有小夫欺负,这个时候大雄每次都会找哆啦A梦帮忙;哆啦A梦就会从它的口袋里面拿出各种各样的工具去帮助大雄找回场子。这里面其实就体现出来了策略模式;那么用java程序如何来进行表示呢?
代码演示:
1、各种工具其实都是从口袋中拿出来的,首先可以创建一个口袋的接口:
package com.design.dp.strategy;
// 策略接口,里面是各种各样的工具
public interface KouDai {
void tools();
}
2、既然有了口袋接口,肯定可以拿出来不同的工具:
package com.design.dp.strategy;
//这是一个可以变大的房子
public class XiaoFangZhi implements KouDai{
@Override
public void tools() {
System.out.println("大雄拿着我去找静香了。。。");
}
}
package com.design.dp.strategy;
// 这是一个缩小灯
public class SuoXiaoDeng implements KouDai{
@Override
public void tools() {
System.out.println("被我照到全部都会缩小哦");
}
}
package com.design.dp.strategy;
//这是一个竹蜻蜓
public class ZhuQingTing implements KouDai{
@Override
public void tools() {
System.out.println("戴上我就可以自由飞翔~~~");
}
}
3、此时工具已经有了,那么口袋是在哪呢?没错,口袋在哆啦A梦身上
package com.design.dp.strategy;
// 这是一个哆啦A梦
public class Doraemon {
// 口袋在哆啦A梦身上是很合情合理的事情!
private KouDai kouDai;
public Doraemon(KouDai kouDai) {
this.kouDai = kouDai;
}
// 哆啦A梦会从口袋中拿出工具帮助大雄
public void tools(){
this.kouDai.tools();
}
}
4、一切已经就绪了,大雄此时雄赳赳气昂昂的出门了
package com.design.dp.strategy;
public class DaXiong {
public static void main(String[] args) {
Doraemon doraemon;
System.out.println("大雄碰见静香了");
doraemon = new Doraemon(new XiaoFangZhi());
doraemon.tools();
System.out.println("大雄和静香在房子里不知道在干什么");
System.out.println("此时胖虎过来了");
doraemon = new Doraemon(new SuoXiaoDeng());
doraemon.tools();
System.out.println("胖虎被缩小灯照到了,然后哭着回家找妈妈去了");
System.out.println("转角大雄碰见了小夫一群人");
doraemon = new Doraemon(new ZhuQingTing());
doraemon.tools();
System.out.println("大雄不慌不急的拿出了竹蜻蜓飞走了");
}
}
好处: 体现了高内聚低耦合的特性呀;扩展性也相对较好,只需要添加具体的策略(工具)。然后调用就行了;
缺点: 当策略越来越多时,这个时候维护可能就会越来越麻烦了