php网站500错误,网络推广软件是否涉及犯罪,网站备案 需要上传网站么,wordpress建立模板一#xff1a;概述 模板方法#xff08;Template Method#xff09;是一种行为型设计模式。它定义了一个算法的基本框架#xff0c;并且可能是《设计模式#xff1a;可复用面向对象软件的基础》一书中最常用的设计模式之一。 模板方法的核心思想很容易理解。我们需要定义一…一概述 模板方法Template Method是一种行为型设计模式。它定义了一个算法的基本框架并且可能是《设计模式可复用面向对象软件的基础》一书中最常用的设计模式之一。 模板方法的核心思想很容易理解。我们需要定义一个包含多个固定步骤的算法框架。具体的实现类只能重写这些步骤但不能改变整体框架。这些步骤通常被称为钩子方法hook methods。 二设计思想
定义一个包含多个典型步骤的算法框架。子类可以调整这些步骤但不能改变整体框架。
三使用场景
需要使用算法的不同版本。这些算法版本由相似的步骤组成。
四模式结构 AbstractClass抽象类
定义算法的结构由多个步骤组成。算法的步骤可以是虚函数或纯虚函数。
ConcreteClass具体类
根据需要重写算法的特定步骤。
五代码示例
#include iostream// 抽象基类定义模板方法
class Meal {
public:// 模板方法final 关键字确保子类不能重写该方法void prepareMeal() { boilWater(); // 步骤 1烧水cook(); // 步骤 2烹饪子类需要实现serve(); // 步骤 3上菜}virtual ~Meal() default;private:void boilWater() { // 步骤 1烧水所有餐食共享的步骤std::cout Boiling water\n;}virtual void cook() 0; // 步骤 2烹饪子类必须实现virtual void serve() 0; // 步骤 3上菜子类必须实现
};// 具体子类制作汤
class Soup : public Meal {
private:void cook() override { // 实现具体的烹饪步骤std::cout Cooking soup\n;}void serve() override { // 实现具体的上菜步骤std::cout Serving soup\n;}
};// 具体子类制作沙拉
class Salad : public Meal {
private:void cook() override { // 实现具体的烹饪步骤std::cout Preparing salad\n;}void serve() override { // 实现具体的上菜步骤std::cout Serving salad\n;}
};int main() {std::cout Preparing meal of Soup:\n;Meal* meal new Soup();meal-prepareMeal(); // 调用模板方法自动完成一系列步骤delete meal;std::cout \nPreparing meal of Salad:\n;meal new Salad();meal-prepareMeal(); // 调用模板方法自动完成一系列步骤delete meal;return 0;
}六相关模式 模板方法模式和策略模式的使用场景非常相似。两者都允许提供算法的不同变体。模板方法模式通过子类化在类级别上实现而策略模式通过对象组合在对象级别上实现。策略模式将不同的策略作为对象提供因此可以在运行时交换策略。模板方法模式倒置了控制流遵循好莱坞原则“别找我们我们来找你”。策略模式通常是一个黑盒它允许你在不需要了解其细节的情况下替换策略。
七优缺点 优点
通过创建新的子类新的算法变体易于实现。算法中的共同步骤可以直接在接口类中实现。
缺点
即使是算法的小变体也需要创建一个新的类这可能导致创建许多小类。算法框架是固定的无法更改不过你可以通过将框架函数设为虚函数来克服这一限制。
参考
1. https://zh.wikipedia.org/wiki/%E6%A8%A1%E6%9D%BF%E6%96%B9%E6%B3%95
2. The Template Method – MC BLOG