中国建设教育协会报名网站,显卡服务器租用,没有网站seo怎么做,精品网站模板目录
1、模板模式含义
2、模板模式的UML图学习
3、模板模式的应用场景
4、模板模式的优缺点
5、C实现的实例 1、模板模式含义 模板模式#xff08;Template Method Pattern#xff09;是一种行为设计模式#xff0c;它定义了一个操作中的算法骨架#xff0c;将某些步骤…目录
1、模板模式含义
2、模板模式的UML图学习
3、模板模式的应用场景
4、模板模式的优缺点
5、C实现的实例 1、模板模式含义 模板模式Template Method Pattern是一种行为设计模式它定义了一个操作中的算法骨架将某些步骤的具体实现延迟到子类中。 模板模式使得子类可以在不改变算法结构的情况下重新定义算法的某些步骤从而实现代码复用和扩展性。
2、模板模式的UML图学习 抽象基类AblstractClass负责规定好接口让子类实现接口并定义一个模板方法。模板方法是算法骨架包含了调用基本操作的步骤。具体实现子类ConcreteClass实现抽象基类的抽象接口即实现模板方法中的基本操作。
3、模板模式的应用场景
1存在一组相似的操作当有一组操作拥有相同的算法结构但某些步骤的实现细节各不相同时可以使用模板模式来定义这些操作的通用部分并将变化的部分留给子类去实现。
2需要代码复用和扩展性模板模式通过定义算法骨架和延迟某些步骤的实现使得代码更加灵活和可扩展。
4、模板模式的优缺点
1优点
封装了不变部分扩展了可变部分模板模式将算法的不变部分封装在抽象基类中而将可变部分延迟到子类中实现从而实现了代码的复用和扩展。提高了代码的可维护性由于算法骨架在抽象基类中定义因此当算法结构发生变化时只需要修改抽象基类即可而不需要修改每个具体实现子类。
2缺点
增加了系统的复杂性模板模式需要定义抽象基类和具体实现子类以及它们之间的继承关系这可能会增加系统的复杂性。可能导致子类过多如果算法中有多个可变步骤那么可能需要定义多个具体实现子类来覆盖这些步骤从而导致子类数量过多。
5、C实现的实例
以下是一个使用C实现的模板模式示例该示例模拟了一个咖啡冲泡过程其中包含了冲泡咖啡的算法骨架和不同的冲泡步骤实现。
#include iostream // 抽象基类定义模板方法和基本操作
class CoffeeMaker {
public: virtual ~CoffeeMaker() {} // 模板方法冲泡咖啡的步骤 void brewCoffee() { boilWater(); brew(); pourInCup(); if (customerWantsCondiments()) { addCondiments(); } } protected: // 基本操作留给子类实现 virtual void brew() 0; virtual void addCondiments() 0; // 可能不需要子类重写的辅助方法 void boilWater() { std::cout Boiling water std::endl; } void pourInCup() { std::cout Pouring into cup std::endl; } // 可能需要子类决定的策略方法 virtual bool customerWantsCondiments() { return true; }
}; // 具体子类黑咖啡
class BlackCoffee : public CoffeeMaker {
protected: void brew() override { std::cout Brewing black coffee std::endl; } void addCondiments() override { // 黑咖啡不加调料 }
}; // 具体子类加糖加奶咖啡
class SugarMilkCoffee : public CoffeeMaker {
protected: void brew() override { std::cout Brewing coffee with sugar and milk std::endl; } void addCondiments() override { std::cout Adding sugar and milk std::endl; } bool customerWantsCondiments() override { return true; // 假设加糖加奶咖啡总是需要加调料 }
}; int main() { CoffeeMaker* maker new BlackCoffee(); maker-brewCoffee(); delete maker; std::cout \n; maker new SugarMilkCoffee(); maker-brewCoffee(); delete maker; return 0;
}
在这个示例中CoffeeMaker类是抽象基类它定义了冲泡咖啡的基本步骤作为模板方法brewCoffee并声明了两个纯虚函数brew和addCondiments作为基本操作让子类去实现。通过这种方式我们可以复用通用的冲泡流程同时允许子类灵活地改变某些步骤符合模板方法模式的设计理念。