《HEAD FIRST 设计模式》在第一章设计模式入门中介绍了策略模式(Strategy Pattern)。
定义
策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
类图
抽象类strategy作为接口定义。strategy_1和strategy_2分别实现了两种具体的策略。用户User可通过set方法设置策略。
代码
//策略接口:strategy.h
class strategy_interface
{
vitual void algorithm() = 0;
} ;
class strategy_1: public strategy_interface
{
void algorithm();
};
class strategy_2: public strategy_interface
{
void algorithm();
};
// strategy.cpp
#include <stdio.h>
void strategy_1::algorithm()
{
printf("this is strategy_1\n");
}
void strategy_2::algorithm()
{
printf("this is strategy_2\n");
}
// user.h
class strategy_interface;
class user
{
public:
void Algorithm();
void set_strategy(strategy_interface* ptr);
private:
strategy_interface* s_ptr;
};
// user.cpp
include "strategy.h"
void user::Algorithm()
{
if (s_ptr != NULL) s_ptr->algorithm();
else printf("no strategy for user\n");
}
void user::set_strategy(strategy_interface* ptr)
{
s_ptr = ptr;
}
笔记
1.把变化的部分取出并封装起来,以便以后可以轻易地改动或扩充此部分,而不影响不需要变化的其他部分。
2.多用组合,少用继承。