前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式----策略模式

设计模式----策略模式

作者头像
SuperHeroes
发布2018-05-30 16:57:24
4980
发布2018-05-30 16:57:24
举报
文章被收录于专栏:云霄雨霁云霄雨霁云霄雨霁

策略模式:  策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。

策略模式的结构:

策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,这一系列策略类作为一个抽象策略类的子类。

举个例子:我们小时候都玩过插卡的游戏机,游戏机接受各种游戏卡,针对插入的不同游戏卡游戏机会有不同的行为。我们把游戏卡这个统称的概念定义成接口或者抽象类,而各种具体的游戏卡都实现该接口或者抽象类。这些具体的游戏卡类就是一组策略类。该模式的基础应该是面向对象语言的上溯造型语言特性和动态绑定机制。

这个模式涉及到三个角色:

  • 环境角色:持有一个策略接口/抽象类的引用,如上述例子的游戏机类。
  • 抽象策略角色:这是一个抽象角色,给出所有具体策略类所需的接口,如上述例子的游戏卡概念接口/抽象类。
  • 集体策略角色:包装了该具体策略角色的相关算法或行为,如上溯例子的具体的一组游戏卡类。

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语句和继承实现造成的维护性扩展性差的问题;缺点是如果策略很多,那么需要创建的类和对象的数量非常可观。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.11.04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档