您的位置:首页 > 其它

大话设计模式-模板方法模式

2016-01-13 19:39 218 查看
定义:

模板方法(TemplateMethod)模式: 定义一个操作中的算法的骨架,

而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结

构即可重定义该算法的某些特定的步骤。

特点:

把不变行为搬移到超类,去除子类中的代码来体现其优势。模板方法

其实就是提供了一个很好的代码复用平台。



当不变和可变的行为在子类的实现中混合在一起的时候,不变的行为就

会在子类中重复出现,我们通过模板方法模式将这些不变的行为搬移到一

个单独的地方,这样就帮助子类摆脱了重复的不变行为的纠缠。

模板方法模式是通过把不变行为转移到基类,去除子类中的重复代码来

体现它的优势。模板方法模式就是提供了一个很好的代码复用平台。当不

变的和可变的行为在子类的方法中混合出项时,不变的行为就会在子类中

重复出现,我们通过模板方法模式把这些行为搬移到单一的地方,这样就

帮助子类摆脱重复的部分。

class TestPaper
{
public:
    void TestQuestion1()
    {
        cout << " 杨过得到,后来给了郭靖,炼成倚天剑、屠龙刀的玄铁可能是[ ] a.球磨铸铁 b.马口铁 c.高速合金钢 d.碳素纤维 " << endl;
        cout << "答案:" << Answer1() << endl;
    }
    
    void TestQuestion2()
    {
        cout << " 杨过、程英、陆无双铲除了情花,造成[ ] a.使这种植物不再害人 b.使一种珍稀物种灭绝 c.破坏了那个生物圈的生态平衡 d.造成该地区沙漠化  " << endl;
        cout << "答案:" << Answer2() << endl;
    }
    
    void TestQuestion3()
    {
        cout << " 蓝凤凰的致使华山师徒、桃谷六仙呕吐不止,如果你是大夫,会给他们开什么药[ ] a.阿司匹林 b.牛黄解毒片 c.氟哌酸 d.让他们喝大量的生牛奶 e.以上全不对   " << endl;
        cout << "答案:" << Answer3() << endl;
    }
    
protected:
    virtual string Answer1()
    {
        return "";
    }
    
    virtual string Answer2()
    {
        return "";
    }
    
    virtual string Answer3()
    {
        return "";
    }
    
    
};
//学生甲抄的试卷
class TestPaperA : public TestPaper
{
protected:
    virtual string Answer1()
    {
        return "b";
    }
    
    virtual string Answer2()
    {
        return "c";
    }
    
    virtual string Answer3()
    {
        return "a";
    }
};
//学生乙抄的试卷
class TestPaperB : public TestPaper
{
    virtual string Answer1()
    {
        return "c";
    }
    
    virtual string Answer2()
    {
        return "a";
    }
    
    virtual string Answer3()
    {
        return "a";
    }
    
};
int main()
{
    cout << "学生甲抄的试卷:" << endl;
    TestPaper * studentA = new TestPaperA();
    studentA->TestQuestion1();
    studentA->TestQuestion2();
    studentA->TestQuestion3();
    
    cout << "学生乙抄的试卷:" << endl;
    TestPaper * studentB = new TestPaperB();
    studentB->TestQuestion1();
    studentB->TestQuestion2();
    studentB->TestQuestion3();
    
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: