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

荥阳市城乡规划和建设局网站适合小学生的最新新闻

荥阳市城乡规划和建设局网站,适合小学生的最新新闻,专业网站推广引流,建筑装修模式结构图 说明 基本方法是模板方法的组成部分。基本方法分为一下三种: 抽象方法 由抽象类声明,由其具体子类实现。C中就是纯虚函数。 具体方法 由抽象类或具体类声明并实现,子类可以进行覆盖也可以继承。C中是虚函数。 钩子方法 由抽象类…

模式结构图

在这里插入图片描述

说明

基本方法模板方法的组成部分。基本方法分为一下三种:

  • 抽象方法
    • 由抽象类声明,由其具体子类实现。C++中就是纯虚函数。
  • 具体方法
    • 由抽象类或具体类声明并实现,子类可以进行覆盖也可以继承。C++中是虚函数。
  • 钩子方法
    • 由抽象类或具体类声明并实现,子类可能会加以扩展。

其中钩子方法比较特殊,通常在父类给出的实现是一个空实现,并以该实现作为方法的默认实现。当然,默认实现也可以是非空。

模板方法模式中,钩子方法分为两类。
第一类钩子方法可以与一些具体步骤“挂钩”,以确定在不同条件下执行模板方法中的不同步骤,这类钩子方法的返回值通常是boolean类型的,这类方法一般为isXXX(),用于对某个条件进行判断,如果条件满足则执行某一步骤,否则不执行。
如下所示:

void TemplateMethod::template()
{open();display();if(isPrint){print();}
}
bool TemplateMethod::isPrint()
{return true;
}

在代码中isPrint()是钩子方法,它可以决定print()方法是否执行,一般情况下,钩子方法返回值为true,如果不希望某方法执行,可以在其子类中覆盖钩子方法,将其返回值改为false。这种钩子方法可以控制方法的执行,对一个算法进行约束。

第二类钩子方法就是实现体为空的具体方法,子类可以根据需要覆盖或者继承这些钩子方法,与抽象方法相比,钩子方法的好处在于如果没有覆盖父类中定义的钩子方法,编译可以通过,但是如果没有覆盖父类中抽象方法,编译将报错。

子类的钩子方法覆盖父类的钩子方法,可以通过子类对父类方法的执行进行约束,实现对父类的反向控制。

模板方法模式适用场景

  1. 一次性实现一个算法的不变部分,并将可变行为留给子类来实现
  2. 各子类中公共的行为应被提取出来,并集中到一个公共父类中,以避免代码重复。首先需要识别现有代码中的不同之处,并且将不同之处分离为新的操作,然后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
  3. 对一些复杂的算法进行分割,将其算法中固定不变的部分设计为模板方法和父类具体方法,而一些可以改变的细节由其子类来实现。
  4. 控制子类的扩展。模板方法只在特定点调用钩子方法,这样就只允许在这些点进行扩展,也就是说对于某些方法,可以通过钩子方法来进行扩展,而对于不能进行扩展的方法也可以将其定义为final方法,对算法的扩展进行有效的控制和约束。

扩展

  • 继承的使用
    • 在扩展抽象层时采用继承,具体类之间的复用 以及 抽象层之间的相互调用则使用关联关系。
  • 好莱坞原则
    • 子类不需要调用父类,而通过父类来调用子类,将某些步骤的实现写在子类中,由父类来控制整个过程。

实例

银行业务办理

在这里插入图片描述

#include <iostream>
#include <vector>
using namespace std;class BankTemplateMethod {
public:virtual ~BankTemplateMethod() = default;virtual void take_number() final { cout << "取号" << endl;};virtual void transact() = 0;virtual void evaluate() final { cout << "反馈评分" << endl; };virtual void process() final {this->take_number();this->transact();this->evaluate();};
};class Deposit : public BankTemplateMethod {
public:void transact() override { cout << "存款" << endl;}
};class Withdraw : public BankTemplateMethod {
public:void transact() override { cout << "取款" << endl; }
};class Transfer : public BankTemplateMethod {
public:void transact() override { cout << "转账" << endl; }
};int main (void)
{vector<BankTemplateMethod *> banks{new Deposit(),new Withdraw(),new Transfer()};for (auto i : banks) {i->process();cout << "\n";}for (auto i : banks) {delete i;}
}
http://www.wangmingla.cn/news/143581.html

相关文章:

  • 专门做品牌折扣的网站培训计划模板
  • 天安保险公司官网网站seo是什么
  • 网站的根目录的路径网络推广策划方案怎么写
  • 柳州高端网站建设114网址大全
  • 企业限制访问网站排名优化百度
  • 临猗县 保障住房和建设住建网站广告推广平台赚取佣金
  • 网站设计存在的不足核酸检测最新消息
  • 怎样做网站兼职淘宝指数官网
  • 金华市网站建设最低价seo公司厦门
  • 怎样做机械租赁的网站外链seo推广
  • 淘宝联盟网站建设不完整友情链接网自动收录
  • 网站建设平台排行榜my77728域名查询
  • 军队工程建设项目招投标网站如何设计网站
  • python 做网站开发吗aso优化推广公司
  • 常用网站布局seo服务是什么意思
  • php网站开发答案网站搜索引擎优化的方法
  • 贵阳网站建设kuhugz网页版百度云
  • 做网站可以在哪儿接活昆明百度推广开户
  • web网站开发课程seo是什么意思
  • 南京网站建设小程序开发 雷仁网络2024很有可能再次封城吗
  • 安康做网站公司最吸引人的引流话术
  • 鹤壁网站建设公司中国进入全国紧急状态
  • 京东商城网站域名开封网站快速排名优化
  • 商城网站平台怎么做企业网站模板html
  • 找网络公司做网站需要注意什么制作网站的工具
  • 广东门户网站建设常见的网络营销平台有哪些
  • wordpress站点网上怎么找人去推广广告
  • 农业企业网站建设流程网站搜索引擎优化技术
  • 可以做网络兼职的网站营销技巧和话术
  • 河北 建设厅网站首页北京seo代理计费