24种设计模式--策略模式(strategy)、模板模式(template)
@
目录
第一部分:策略模式
灵活的路由、处理不同逻辑。类似路由不同的推荐逻辑。
1.定义接口:Game
package com.dahan.strategy;
/**
* 大汉软件
*/
public interface Game {
void play();
}
2.实现Game接口:
2.1 DNF
package com.dahan.strategy.impl;
import com.dahan.strategy.Game;
/**
* 大汉软件
*/
public class DNF implements Game {
@Override
public void play() {
System.out.println("DNF");
}
}
2.2 LOL
package com.dahan.strategy.impl;
import com.dahan.strategy.Game;
/**
* 大汉软件
*/
public class LoL implements Game {
@Override
public void play() {
System.out.println("LOL");
}
}
3.引用的上下文:
package com.dahan.strategy;
/**
* 大汉软件
*/
public class StrategyContext {
public void play(Game game) {
game.play();
}
}
4.测试类
package com.dahan.strategy;
import com.dahan.strategy.impl.DNF;
import com.dahan.strategy.impl.LoL;
/**
* 大汉软件
*/
public class StrategyTest {
public static void main(String[] args) {
StrategyContext strategyContext = new StrategyContext();
// DNF
Game game = new DNF();
strategyContext.play(game);
// LoL
game = new LoL();
strategyContext.play(game);
}
}
4.1测试结果:
DNF
LOL
第二部分:模板模式 复用策略模式的代码
便于继承重写具体业务操作
1.定义钩子(抽象类):
package com.dahan.strategy;
/**
* 大汉软件
*/
public abstract class QQSpeed {
public void play() {
accelerate();
nitrogenInjection();
drift();
}
protected void accelerate() {
System.out.println("加速");
}
/**
* 喷氮气
*/
protected abstract void nitrogenInjection();
protected void drift() {
System.out.println("飘移");
}
}
2.具体实现类:
package com.dahan.strategy.impl;
import com.dahan.strategy.QQSpeed;
/**
* 大汉软件
*/
public class QQSpeedOption1 extends QQSpeed {
@Override
protected void nitrogenInjection() {
System.out.println("喷氮气1111");
}
}
package com.dahan.strategy.impl;
import com.dahan.strategy.QQSpeed;
/**
* 大汉软件
*/
public class QQSpeedOption2 extends QQSpeed {
@Override
protected void nitrogenInjection() {
System.out.println("喷氮气2222");
}
}
3.测试类:
package com.dahan.strategy.impl;
/**
* 大汉软件
*/
public class TemplateTest {
public static void main(String[] args) {
QQSpeedOption1 qqSpeedOption1 = new QQSpeedOption1();
qqSpeedOption1.play();
System.out.println("==========");
QQSpeedOption2 qqSpeedOption2 = new QQSpeedOption2();
qqSpeedOption2.play();
}
}
3.1测试结果:
加速
喷氮气1111
飘移
============
加速
喷氮气2222
飘移
参考地址
本文来自博客园,作者:土木转行的人才,转载请注明原文链接