设计模式 - 数据访问对象模式
设计模式 - 拦截过滤器模式

设计模式 - 前端控制器模式

violet posted @ Jul 11, 2020 06:19:01 AM in 笔记 with tags Golang Design Pattern , 438 阅读

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

  • 前端控制器(Front Controller) - 处理应用程序所有类型请求的单个处理程序,应用程序可以是基于 web 的应用程序,也可以是基于桌面的应用程序。
  • 调度器(Dispatcher) - 前端控制器可能使用一个调度器对象来调度请求到相应的具体处理程序。
  • 视图(View) - 视图是为请求而创建的对象。

 

package main

import "fmt"

type HomeView struct{}

func (h *HomeView) Show() {
	fmt.Println("displaying home page")
}

type StudentView struct{}

func (s *StudentView) Show() {
	fmt.Println("displaying student page")
}

type Dispatcher struct {
	HomeView    *HomeView
	StudentView *StudentView
}

func NewDispatcher() *Dispatcher {
	return &Dispatcher{
		HomeView:    &HomeView{},
		StudentView: &StudentView{},
	}
}

func (d *Dispatcher) Dispatch(request string) {
	if request == "student" {
		d.StudentView.Show()
	} else {
		d.HomeView.Show()
	}
}

type FrontController struct {
	Dispatcher *Dispatcher
}

func NewFrontController() *FrontController {
	return &FrontController{
		Dispatcher: NewDispatcher(),
	}
}

func (f *FrontController) isAuthenticUser() bool {
	fmt.Println("user is authenticated successfully")
	return true
}

func (f *FrontController) trackRequest(request string) {
	fmt.Println("Page requested: ", request)
}

func (f *FrontController) DispatherRequest(request string) {
	f.trackRequest(request)
	if f.isAuthenticUser() {
		f.Dispatcher.Dispatch(request)
	}
}

func main() {
	controller := NewFrontController()
	controller.DispatherRequest("home")
	controller.DispatherRequest("student")
}
charlly 说:
Jan 08, 2023 01:40:01 PM

A front controller is a design pattern used to route requests to controllers in a web application. The front controller may be the only controller that handles all requests, or it may delegate requests to other controllers. The front controller pattern is often used in conjunction with the Model View Controller (MVC) pattern. The front controller design pattern is used to provide a centralized point of request handling. This can reduce the complexity of an application, as well as improve maintainability. The front controller may home real estate Orange Park also provide features such as security, request logging, and auditing.


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter