您的位置:首页 > 其它

设计模式 - 模版方法模式

2015-01-26 20:50 204 查看
模板方法模式,定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。



AbstractClass,抽象类,一个抽象模板,定义了一个模板方法,该方法给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象接口中,推迟到子类实现。顶级逻辑也可调用一些具体的接口。

ConcreteClass,子类,实现父类的一个或多个抽象接口。

每个AbstractClass都可有任意多个ConcreteClass与之对应,而每一个ConcreteClass都可以给出这些顶层逻辑的抽象接口的不同实现,使得顶层逻辑的实现各不相同。

基本实现代码如下:

//抽象模板类
class AbstractClass
{
public:
void TemplateMethod()
{
PrimitiveOperation1();
PrimitiveOperation2();
}

protected:
virtual void PrimitiveOperation1() = 0;
virtual void PrimitiveOperation2() = 0;
};

//具体实现类A
class ConcreteClassA : public AbstractClass
{
protected:
void PrimitiveOperation1()
{
printf("具体步骤A \n");
}

void PrimitiveOperation2()
{
printf("具体步骤B \n");
}
};

//具体实现类B
class ConcreteClassB : public AbstractClass
{
protected:
void PrimitiveOperation1()
{
printf("具体步骤1 \n");
}

void PrimitiveOperation2()
{
printf("具体步骤2 \n");
}
};

//使用代码
int main()
{
AbstractClass *pA = new ConcreteClassA();
pA->TemplateMethod();

AbstractClass *pB = new ConcreteClassB();
pB->TemplateMethod();
}

模板方法把不变的行为搬移到抽象父类中,去除了子类中的重复代码,抽象父类提供了一个很好的代码复用平台。

当不变的和可变的行为在子类的实现接口中混合在一起的时候,不变的行为可能在子类中重复出现。通过模板方法把这些不变行为搬移到单一的地方,可以帮助子类摆脱重复的不变行为的纠缠。

模板方法也有一定的缺点,因为在抽象父类中,顶层逻辑的算法轮廓已经定下来了,想要改变就比较难了,这样会造成设计的灵活性不高。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: