设计模式——前端控制器模式(C++实现)

前端控制器模式

           前端控制器模式(Front Controller Pattern)是用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理。该处理程序可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。

前端控制器设计模式的实体。

         1、前端控制器(Front Controller) - 处理应用程序所有类型请求的单个处理程序。

         2、调度器(Dispatcher) - 前端控制器可能使用一个调度器对象来调度请求到相应的具体处理程序。

         3、视图(View) - 视图是为请求而创建的对象。

采用菜鸟教程的例子,这里用C++实现

#include<iostream>
#include<string>

using namespace std;

//创建视图类HomeView
class HomeView
{
public:
	HomeView() {};
	~HomeView() {};
	void show();
};

void HomeView::show()
{
	cout << "Displaying home page" << endl;
}

//创建视图类StudentView
class StudentView
{
public:
	StudentView() {};
	~StudentView() {};
	void show();
};

void StudentView::show()
{
	cout << "Displaying Student page" << endl;
}

//创建一个调度器类Dispatcher
class Dispatcher
{
public:
	Dispatcher();
	~Dispatcher();

	void dispatch(string request);
private:
	StudentView *studentview;
	HomeView *homeview;
};

Dispatcher::Dispatcher()
{
	this->studentview = new StudentView();
	this->homeview = new HomeView();
}
Dispatcher::~Dispatcher()
{
	delete this->studentview;
	this->studentview = NULL;
	delete this->homeview;
	this->homeview = NULL;
}

void Dispatcher::dispatch(string request)
{
	if ("student" == request)
	{
		this->studentview->show();
	}
	else
	{
		this->homeview->show();
	}
}

//创建一个前端控制器类FrontController
class FrontController
{
public:
	FrontController();
	~FrontController();

	bool isAuthenticUser();
	void trackRequest(string request);
	void dispatchRequest(string request);
private:
	Dispatcher *dispatcher;
};

FrontController::FrontController()
{
	this->dispatcher = new Dispatcher();
}
FrontController::~FrontController()
{
	delete this->dispatcher;
	this->dispatcher = NULL;
}

bool FrontController::isAuthenticUser()
{
	cout << "User is authenticated successfully." << endl;
	return true;
}
void FrontController::trackRequest(string request)
{
	cout << "Page requested: " << request << endl;
}
void FrontController::dispatchRequest(string request)
{
	trackRequest(request);
	if (isAuthenticUser())
	{
		this->dispatcher->dispatch(request);
	}
}

int main()
{
	FrontController *fronController = new FrontController();
	fronController->dispatchRequest("home");
	fronController->dispatchRequest("student");

	delete fronController;
	fronController = NULL;
	system("pause");
	return 0;
}

在visual studio 2015上运行结果:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值