策略模式
策略模式在实现上与工厂模式略微不同,还是那句话,工厂模式的关注点在创建对象上,而策略模式,我认为更关注的是结果,因为它在Context中直接执行了结果,并且返回了。既然说与工厂模式相同,那么我们就把工厂模式的代码拿过来,改造一下。
看代码:
//抽象出来相同的行为
public interface RunType {
void runTp();
}
//各个业务类实现各自的行为
public class Person implements RunType {
@Override
public void runTp() {
System.out.println("我是人,是2条腿走路");
}
}
//各个业务类实现各自的行为
public class Cat implements RunType {
@Override
public void runTp() {
System.out.println("我是小猫咪,是4条腿走路");
}
}
//创建工厂,工厂根据不同的参数,创建对应的业务类
public class FactoryObject {
public RunType getRObject(String param){
RunType rt = null;
if(StringUtils.equals(param,"1")){
rt = new Person();
}else{
rt = new Cat();
}
return rt;
}
}
如果我们使用策略模式,在代码实现上的区别就是factory了,策略模式的factory(Context):
public class Context{
private RunType runType;
public Context(RunType runType){
this.runType= runType;
}
public RunType doRunTp(){
runType.runTp();
}
}
//测试类
class testFactory{
public static void main(String[] args) {
FactoryObject fo = new FactoryObject();
RunType rt = fo.getRObject("1");
rt.runTp();
}
}
在代码上,我们还看到了,策略模式在实现上,消除了过多的if…else逻辑,直接将执行结果返回,所以我才认为策略模式的关注点是结果,不关心对象的创建过程。
而且在扩展方面,策略模式较于工厂模式,另一个优点就是,在扩展的时候,只需添加策略类即可,不会像工厂模式那样,需要修改工厂类。
- 用途不一样。工厂模式是创建型模式,它的作用是创建对象。策略模式是行为型模式,作用是在许多行为中选择一种行为,关注的是行为的多样性。
- 解决的问题不同。工厂模式是解决资源的统一分发,将对象的创立同客户端分离开来。策略模式是为了解决策略的切换和扩展。
- 工厂相当于黑盒子,策略相当于白盒子。
模板模式
模板模式比较简单,就是一个创建一个东西,都需要哪些步骤,要实现步骤之后,还有提供一个方法,调用这些步骤,看代码,一看便知,很简单的
public abstract class Game {
abstract void initialize();
abstract void startPlay();
abstract void endPlay();
//模板
public final void play(){
//初始化游戏
initialize();
//开始游戏
startPlay();
//结束游戏
endPlay();
}
}
public class Football extends Game {
@Override
void endPlay() {
System.out.println("Football Game Finished!");
}
@Override
void initialize() {
System.out.println("Football Game Initialized! Start playing.");
}
@Override
void startPlay() {
System.out.println("Football Game Started. Enjoy the game!");
}
}
public class TemplatePatternDemo {
public static void main(String[] args) {
Game game = new Football();
game.play();
}
}