Behavior.TemplateMethod模板方法模式:共同方法提升至父类

本文介绍模板方法模式的概念及其在在线购物流程中的应用。通过抽象类定义算法骨架,并允许子类重新定义某些步骤而不改变整体流程。示例展示了天猫和京东购物流程的相似性和差异。
模板方法模式(Template Method Pattern)的定义

(1)定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

(2)模板方法模式的结构和说明

 

  ①AbstractClass:抽象类。用于定义算法骨架和抽象的原语操作,具体的子类通过重定义这些原语操作来实现一个算法的各个步骤。在这个类里面,还可以提供算法中通用的实现。此外,该类还实现了一个模板方法,它定义了算法的骨架。该模板方法不仅调用原语操作,也调用AbstractClass或其他对象中的操作

  ②ConcreteClass:具体实现类。用来实现算法骨架中的某些步骤,完成与特定子类相关的功能。

【编程实验】在线购物流程

//行为型模式——模板方式模式
//场景:在线购物
/*
网购,天猫或者京东,经历一下四个步骤:
①访问网站   //访问协议和网址不同
②浏览下单   //假设两个网站操作一样
③支付       //天猫:支付宝,东京;货到付款
④收货       //确认操作一样
注意:两个网站第2步和第4步都是一样的,但访问和支付的访问不一样
*/
#include <iostream>
#include <string>

using namespace std;

//抽象模板方法:将相同的方法提升到父类
class CShopOnLine{
protected://专题方法,由子类自己去实现
	virtual void AccessUrl() = 0;
	virtual void PayMoney() = 0;
private://公共方法
	void MakeOrder(){cout << "创建订单成功" << endl;}
	void ReceiptGood(){cout << "收到了物品" << endl;}
public:
	void GoShopping(){//购物
		//访问网站----->浏览下单------->支付-------------->收货
		AccessUrl();			MakeOrder();		PayMoney();			ReceiptGood();
	}
};


//天猫
class CTmall : public CShopOnLine{
public:
	void AccessUrl(){cout << "https://www.tmall.com/" << endl;}
	void PayMoney(){cout << "支付宝" << endl;}
};

//京东
class CJD : public CShopOnLine{
public:
	void AccessUrl(){cout << "https://www.jd.com/" << endl;}
	void PayMoney(){cout << "微信支付/货到付款" << endl;}
};

void main()
{
	cout << "欢迎来到天猫商城:" << endl;
	CShopOnLine* pTmall = new CTmall();
	if(pTmall != NULL){
		pTmall->GoShopping();
		delete pTmall; pTmall = NULL;
	}
	cout << endl << "欢迎来到京东商城:" << endl; 
	CShopOnLine* pJD = new CJD();
	if(pJD != NULL){
		pJD->GoShopping();
		delete pJD; pJD = NULL;
	}
}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值