成都市住房和城乡建设厅网站,ui设计培训班排名,静态网站设计,个人网站 备案本文章属于专栏- 概述 - 《设计模式#xff08;极简c版#xff09;》-CSDN博客 本章简要说明适配器模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。
模式说明
方案#xff1a; 模版模式定义了一个逻辑的骨架#xff0c;将某些步骤推迟到子类中实现。父类… 本文章属于专栏- 概述 - 《设计模式极简c版》-CSDN博客 本章简要说明适配器模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。
模式说明
方案 模版模式定义了一个逻辑的骨架将某些步骤推迟到子类中实现。父类定义了一个模版方法该方法包含了算法的基本结构而其中的某些步骤由子类实现。优点 提供了代码复用将公共的算法逻辑放在父类中避免了代码重复。提高了扩展性子类可以通过实现特定的方法来改变算法的某些步骤而不需要修改父类的代码。缺点 增加了类的数量引入了多个子类来实现算法的不同部分可能会增加类的数量和复杂性。子类必须遵循父类的模版子类必须实现父类定义的抽象方法这可能限制了子类的灵活性。
本质思想在模版模式中将逻辑的结构定义在一个父类中而将具体的步骤实现延迟到子类中。这样可以在不改变算法整体结构的情况下让子类自由地实现某些步骤从而实现算法的定制化。
实践建议十分推荐。在一个部门多个服务且有相同部分可以抽象时使用一个基类来约束大家的业务行为不仅降低新人培养成本也让不同人切换维护的服务成本更低。增加了团队效率。
代码示例:
#include iostream// 父类定义算法的骨架
class Bird {
public:void fly() {// 模版方法定义了算法的骨架gatherMaterials();buildNest();layEggs();sitOnEggs();}// 抽象方法需要由子类实现virtual void buildNest() 0;virtual void layEggs() 0;virtual void sitOnEggs() 0;// 共同步骤可以在父类中实现void gatherMaterials() {std::cout Gathering materials for nest. std::endl;}
};// 子类实现具体的步骤
class Sparrow : public Bird {
public:void buildNest() override {std::cout Building a small nest. std::endl;}void layEggs() override {std::cout Laying small eggs. std::endl;}void sitOnEggs() override {std::cout Sparrow is sitting on eggs. std::endl;}
};// 另一个子类实现具体的步骤
class Eagle : public Bird {
public:void buildNest() override {std::cout Building a large nest. std::endl;}void layEggs() override {std::cout Laying large eggs. std::endl;}void sitOnEggs() override {std::cout Eagle is sitting on eggs. std::endl;}
};int main() {Sparrow sparrow;std::cout Sparrow lifecycle: std::endl;sparrow.fly();std::cout std::endl;Eagle eagle;std::cout Eagle lifecycle: std::endl;eagle.fly();return 0;
}/*
Output:
Sparrow lifecycle:
Gathering materials for nest.
Building a small nest.
Laying small eggs.
Sparrow is sitting on eggs.Eagle lifecycle:
Gathering materials for nest.
Building a large nest.
Laying large eggs.
Eagle is sitting on eggs.
*/