zoukankan      html  css  js  c++  java
  • 模板模式

    作用:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤

    其关键是将通用算法(逻辑)封装在抽象基类中,并将不同的算法细节放到子类中实现

    代码:

    #include <iostream>
    using namespace std;
    
    class Game
    {
    public:
        virtual ~Game() {}
    public:
        virtual void initialize() = 0;
        virtual void startPlay() = 0;
        virtual void endPlay() = 0;
        virtual void play()
        {
            initialize(); //初始化游戏
            startPlay(); //开始游戏
            endPlay();  // 结束游戏
        }
    };
    
    class FootballGame : public Game
    {
    public:
        virtual void initialize()
        {
            cout << "FootballGame initialize" << endl;
        }
        
        virtual void startPlay()
        {
            cout << "FootballGame begin" << endl;
        }
        
        virtual void endPlay()
        {
            cout << "FootballGame end" << endl;
        }
    };
    
    class BasketballGame : public Game
    {
    public:
        virtual void initialize()
        {
            cout << "BasketballGame initialize" << endl;
        }
    
        virtual void startPlay()
        {
            cout << "BasketballGame begin" << endl;
        }
    
        virtual void endPlay()
        {
            cout << "BasketballGame end" << endl;
        }
    };
    
    void test()
    {
        Game *game = new BasketballGame();
        game->play();
        delete game;
        game = new FootballGame();
        game->play();
        delete game;
        game = NULL;
    
    }
    
    int main()
    {
        test();
        cin.get();
        return 0;
    }
    View Code

    效果:

    模板(Templeate)模式(Strategy)和策略模式的区别:

    模板模式采用继承的方式实现,将逻辑(算法)框架放在抽象基类中,并定义好细节的接口,子类中实现细节。

    策略模式采用组合的方式,将逻辑(算法)框架放在一个类中。

  • 相关阅读:
    BZOJ1316 树上的询问
    BZOJ2599 IOI2011Race
    BZOJ2594 [Wc2006]水管局长数据加强版
    BZOJ3052 [wc2013] 糖果公园 【树上莫队】
    BZOJ4530 BJOI 2014 大融合
    QTREEⅠ SPOJ
    BZOJ 3514: Codechef MARCH14 GERALD07加强版 [LCT 主席树 kruskal]
    BZOJ3669 NOI2014魔法森林
    BZOJ2002 弹飞绵羊
    BZOJ1878 [SDOI2009]HH的项链
  • 原文地址:https://www.cnblogs.com/hupeng1234/p/6814130.html
Copyright © 2011-2022 走看看