策略模式: 策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
策略模式的结构:
策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,这一系列策略类作为一个抽象策略类的子类。
举个例子:我们小时候都玩过插卡的游戏机,游戏机接受各种游戏卡,针对插入的不同游戏卡游戏机会有不同的行为。我们把游戏卡这个统称的概念定义成接口或者抽象类,而各种具体的游戏卡都实现该接口或者抽象类。这些具体的游戏卡类就是一组策略类。该模式的基础应该是面向对象语言的上溯造型语言特性和动态绑定机制。
这个模式涉及到三个角色:
Java代码实现:
//游戏卡接口
interface GameCard{
public void printC();
}
//雪人游戏卡,实现游戏卡接口
class SnowGameCard implements GameCard{
public void PrintC(){ System.out.println("SnowGameCard");
}
//火人游戏卡,实现游戏卡接口
class FireGameCard implements GameCard{
public void PrintC(){ System.out.println("FireGameCard");
}
public class GamePlayer{
GameCard game; //游戏机类持有游戏卡的引用
public GamePlayer(GameCard game){
this.game = game;
}
public static void main(String[] args){
GameCard game = new FireCard();
GamePlayer player = new GamePlayer(game);
player.printC();
}
}
策略模式的特点:
优缺点:
优点是避免许多if-else语句和继承实现造成的维护性扩展性差的问题;缺点是如果策略很多,那么需要创建的类和对象的数量非常可观。