《HEAD FIRST 設(shè)計(jì)模式》在第一章設(shè)計(jì)模式入門中介紹了策略模式(Strategy Pattern)笛厦。
定義
策略模式定義了算法族任内,分別封裝起來(lái),讓它們之間可以互相替換,此模式讓算法的變化獨(dú)立于使用算法的客戶苫幢。
類圖
策略模式
抽象類strategy作為接口定義歇僧。strategy_1和strategy_2分別實(shí)現(xiàn)了兩種具體的策略图张。用戶User可通過set方法設(shè)置策略锋拖。
代碼
//策略接口: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.把變化的部分取出并封裝起來(lái),以便以后可以輕易地改動(dòng)或擴(kuò)充此部分祸轮,而不影響不需要變化的其他部分兽埃。
2.多用組合,少用繼承适袜。