当前位置: 首页 > news >正文

肇庆做网站近三天的国内外大事

肇庆做网站,近三天的国内外大事,网站的链接建设,在线查企业信息查询平台设计模式 19 模板模式 Template Pattern 1.定义 模板模式(Template Pattern)是一种行为设计模式,它定义了一个算法的骨架,将一些步骤的具体实现延迟到子类中。在模板模式中,定义了一个抽象类,其中包含了一个…
设计模式 19 模板模式 Template Pattern

1.定义

        模板模式(Template Pattern)是一种行为设计模式,它定义了一个算法的骨架,将一些步骤的具体实现延迟到子类中。在模板模式中,定义了一个抽象类,其中包含了一个模板方法(template method),这个方法定义了算法的基本结构和步骤,但其中的具体步骤由子类来实现。

        模板模式主要用于在不同子类中封装通用的行为,同时保持整体算法结构的一致性。通过模板方法模式,使得父类能够控制方法的执行顺序,同时细节延迟到子类实现。

2.内涵

模板模式包含以下几个角色:

  1. Abstract Class(抽象类):定义了一个模板方法,该方法是算法的骨架,其中调用了一系列抽象或具体的步骤。抽象类可能还包含了一些通用的实现,这些实现可以在模板方法中直接调用,也可以在需要时在子类中覆盖。
  2. Concrete Class(具体类):继承自抽象类,并实现了其中的具体步骤。每个具体类可以根据需要实现抽象类中定义的方法,并将其组合在一起形成完整的算法。

通过模板模式,可以实现代码复用、减少重复代码的编写,同时保持算法的统一性和一致性。模板模式能够提供一个稳定的算法框架,同时允许子类自由扩展或修改算法的某些部分。

=======================
|      AbstractClass   |
|----------------------|
|+ templateMethod()   |  
|+ primitiveOperation1()|
|+ primitiveOperation2()|
=======================||||=====================|    ConcreteClassA   ||----------------------||# primitiveOperation1()||# primitiveOperation2()|=====================||||=====================|   ConcreteClassB    ||----------------------||# primitiveOperation1()||# primitiveOperation2()|=====================


     
AbstractClass(抽象类):这是模板模式的核心部分,抽象类定义了模板方法 templateMethod() 和两个抽象方法 primitiveOperation1() 和 primitiveOperation2(),其中 templateMethod() 指定了算法的框架,包括一系列调用步骤,而 primitiveOperation1() 和 primitiveOperation2() 则是需要在具体子类中实现的具体步骤。

ConcreteClassA 和 ConcreteClassB(具体类):这是实际实现模板模式的具体子类。它们继承了 AbstractClass 并实现了其中的抽象方法 primitiveOperation1() 和 primitiveOperation2()。每个具体类可能实现完全不同的具体步骤,但是它们遵循相同的模板方法结构(templateMethod())。

     
     
3.使用示例

/*** The Abstract Class defines a template method */
class AbstractClass {/*** The template method defines the skeleton of an algorithm.*/public:void TemplateMethod() const {this->BaseOperation1();this->RequiredOperations1();this->BaseOperation2();this->Hook1();this->RequiredOperation2();this->BaseOperation3();this->Hook2();}protected:void BaseOperation1() const {std::cout << "AbstractClass says: I am doing the bulk of the work\n";}void BaseOperation2() const {std::cout << "AbstractClass says: But I let subclasses override some operations\n";}void BaseOperation3() const {std::cout << "AbstractClass says: But I am doing the bulk of the work anyway\n";}virtual void RequiredOperations1() const = 0;virtual void RequiredOperation2() const = 0;virtual void Hook1() const {}virtual void Hook2() const {}
};/*** Concrete classes have to implement all abstract operations of the base class.* They can also override some operations with a default implementation.*/
class ConcreteClass1 : public AbstractClass {protected:void RequiredOperations1() const override {std::cout << "ConcreteClass1 says: Implemented Operation1\n";}void RequiredOperation2() const override {std::cout << "ConcreteClass1 says: Implemented Operation2\n";}
};class ConcreteClass2 : public AbstractClass {protected:void RequiredOperations1() const override {std::cout << "ConcreteClass2 says: Implemented Operation1\n";}void RequiredOperation2() const override {std::cout << "ConcreteClass2 says: Implemented Operation2\n";}void Hook1() const override {std::cout << "ConcreteClass2 says: Overridden Hook1\n";}
};void ClientCode(AbstractClass *class_) {// ...class_->TemplateMethod();// ...
}int main() {std::cout << "Same client code can work with different subclasses:\n";ConcreteClass1 *concreteClass1 = new ConcreteClass1;ClientCode(concreteClass1);std::cout << "\n";std::cout << "Same client code can work with different subclasses:\n";ConcreteClass2 *concreteClass2 = new ConcreteClass2;ClientCode(concreteClass2);delete concreteClass1;delete concreteClass2;return 0;
}


输出:

Same client code can work with different subclasses:
AbstractClass says: I am doing the bulk of the work
ConcreteClass1 says: Implemented Operation1
AbstractClass says: But I let subclasses override some operations
ConcreteClass1 says: Implemented Operation2
AbstractClass says: But I am doing the bulk of the work anywaySame client code can work with different subclasses:
AbstractClass says: I am doing the bulk of the work
ConcreteClass2 says: Implemented Operation1
AbstractClass says: But I let subclasses override some operations
ConcreteClass2 says: Overridden Hook1
ConcreteClass2 says: Implemented Operation2
AbstractClass says: But I am doing the bulk of the work anyway

上述代码类图


4.注意事项

在使用模板模式(Template Pattern)时,有一些注意事项需要注意以避免可能的问题和踩坑:

  • 抽象类的设计:在定义抽象类时,需要仔细考虑模板方法中的逻辑和步骤顺序,确保所有子类都能正确实现这些步骤。避免在抽象类中定义过多的具体实现,应保持抽象类的简洁性,只包含框架结构和必要的抽象方法。
  • 子类实现的一致性:子类在实现抽象方法时,需要保持接口一致性,确保方法签名和返回类型与父类中定义的一致。否则可能会导致编译错误或运行时异常。
  • 算法的扩展性:模板模式允许子类修改或扩展算法的某些部分,但注意避免过度扩展和修改,以免破坏算法的一致性和规范性。确保扩展的功能是相对独立且有必要的。
  • 模板方法的执行顺序:模板方法定义了算法的执行顺序,子类在实现具体步骤时要遵循这个顺序。任何不当的调整可能会导致算法步骤的混乱或错误。
  • 继承的关系:模板模式使用了继承机制,但应该避免过度使用继承导致类层次结构复杂。确保继承关系的合适性和合理性。
  • 钩子方法:在抽象类中可以定义钩子方法,用于控制算法的某些部分是否执行。需要谨慎设计和使用钩子方法,避免影响算法的整体结构和正确性。
  • 单一职责原则:确保每个具体类只负责实现自己的具体步骤,遵循单一职责原则,避免一个类承担过多的责任和功能。
5.最佳实践


在开发中实现模板模式(Template Pattern)时,可以采用以下一些比较好的经验:

  • 合理抽象和分离关注点:在设计抽象类时,需要将通用的算法步骤抽象出来,同时将具体步骤留给具体子类实现。这样可以实现算法的复用和解耦,同时方便后续的扩展和修改。
  • 使用钩子方法:钩子方法是一种可以控制算法流程的手段,可以在抽象类中定义一些空方法或默认实现,具体子类可以选择性地重写这些方法来影响算法的执行。这样可以在不改变模板方法结构的情况下灵活地扩展和定制算法。
  • 保持一致性:确保所有具体子类实现的具体步骤都是与抽象类中定义的一致的,保持算法的一致性和规范性,避免出现错误或混乱。
  • 封装变化部分:在设计模板模式时,将会变化的部分抽象出来,以便随时扩展和修改,而将不变的部分固定在模板方法中,确保算法的稳定性和可维护性。
  • 使用工厂方法:在具体类的实例化时,可以考虑使用工厂方法模式(Factory Method Pattern),将实例化过程放在具体的工厂类中,以便灵活地切换不同的具体子类。

6.总结

通过模板模式,可以实现代码复用、减少重复代码的编写,同时保持算法的统一性和一致性。模板模式能够提供一个稳定的算法框架,同时允许子类自由扩展或修改算法的某些部分。


 

http://www.khdw.cn/news/43350.html

相关文章:

  • 东莞外网搭建公司北京搜索引擎优化管理专员
  • 云南网站推广微信营销怎么做
  • 淘宝内部优惠券网站怎么建设2023年6月疫情恢复
  • 电商网络营销群排名优化软件
  • 东营做网站seo怎样上百度做广告
  • 连云港做网站制作首选公司seo优化排名易下拉效率
  • 网站主播电脑培训网上培训班
  • 为了 门户网站建设找培训机构的app
  • php网站开发实例教程 pdf微信公众号运营
  • 简述网站开发的几个阶段可以访问境外的浏览器
  • 炫彩发光字制作网站网络推广理实一体化软件
  • 知名商城网站建设山西网络推广专业
  • 怎么样建网站卖东西全国十大教育机构
  • 目前做网站流行的是什么网店营销
  • wordpress 后台修改模板seo技巧课程
  • 企业建设网站流程图百度下载免费安装
  • 网站建设教学廊坊游戏推广平台有哪些
  • 二级建造师报名福州网站seo优化公司
  • 网站的发布与推广方式黄山网站建设
  • 长沙如何做百度的网站衡阳有实力seo优化
  • 企业网站建设方案对比汇报百度新闻发布
  • 摄影师如何做网站海南seo快速排名优化多少钱
  • 寄生虫网站怎么做郑州网络推广平台
  • 电话销售管理系统广东seo网站优化公司
  • 做公司网站建设价格低seo搜索优化
  • 琼海做网站公司含有友情链接的网页
  • 网站开发不满意企业网站管理系统
  • 网上帮人做网站河北百度seo点击软件
  • 罗湖做网站多少钱如何注册属于自己的网站
  • 步步高网站建设报告今日头条搜索引擎