今天把模板方法模式实现了。
//不知道为啥工具栏没了,,
#include <iostream>
using namespace std;
class AbstractClass //模板方法模式
{
public:
AbstractClass():m_ID(0),m_answer(0){}
virtual void OperationA() = 0;
virtual void OperationB() = 0;
void TempOperationMethod()
{
OperationA();
OperationB();
cout << "我的学号是:" << m_ID << endl;
cout << "1+2本题的答案是:" << m_answer << endl;
}
protected:
int m_ID;
char m_answer;
};
class concreteClassA : public AbstractClass
{
public:
virtual void OperationA()
{
m_answer = 'A';
}
virtual void OperationB()
{
m_ID = 12;
}
};
class concreteClassB : public AbstractClass
{
public:
virtual void OperationA()
{
m_answer = 'B';
}
virtual void OperationB()
{
m_ID = 11;
}
};
下面是客户端的调用
concreteClassA *pAobj = new concreteClassA;
concreteClassB *pBobj = new concreteClassB;
pAobj->TempOperationMethod();
pBobj->TempOperationMethod();
代码也比较简单, 总结 通过把不变的行为搬移到父类的TempOperationMethod()中,再根据子类的不同来定义虚函数,放在TempOperationMethod(),
根据多态来实现多样性。 除去子类中重复的代码来体现他的优势
//不知道为啥工具栏没了,,
#include <iostream>
using namespace std;
class AbstractClass //模板方法模式
{
public:
AbstractClass():m_ID(0),m_answer(0){}
virtual void OperationA() = 0;
virtual void OperationB() = 0;
void TempOperationMethod()
{
OperationA();
OperationB();
cout << "我的学号是:" << m_ID << endl;
cout << "1+2本题的答案是:" << m_answer << endl;
}
protected:
int m_ID;
char m_answer;
};
class concreteClassA : public AbstractClass
{
public:
virtual void OperationA()
{
m_answer = 'A';
}
virtual void OperationB()
{
m_ID = 12;
}
};
class concreteClassB : public AbstractClass
{
public:
virtual void OperationA()
{
m_answer = 'B';
}
virtual void OperationB()
{
m_ID = 11;
}
};
下面是客户端的调用
concreteClassA *pAobj = new concreteClassA;
concreteClassB *pBobj = new concreteClassB;
pAobj->TempOperationMethod();
pBobj->TempOperationMethod();
代码也比较简单, 总结 通过把不变的行为搬移到父类的TempOperationMethod()中,再根据子类的不同来定义虚函数,放在TempOperationMethod(),
根据多态来实现多样性。 除去子类中重复的代码来体现他的优势