设计模式 – 业务代表模式

业务代表模式(Business Delegate Pattern)用于对表示层和业务层解耦。它基本上是用来减少通信或对表示层代码中的业务层代码的远程查询功能。在业务层中我们有以下实体。

  • 客户端(Client)
    – 表示层代码可以是 JSP、servletUI java 代码。
  • 业务代表(Business Delegate)
    – 一个为客户端实体提供的入口类,它提供了对业务服务方法的访问。
  • 查询服务(LookUp Service
    – 查找服务对象负责获取相关的业务实现,并提供业务对象对业务代表对象的访问。
  • 业务服务(Business Service)
    – 业务服务接口。实现了该业务服务的实体类,提供了实际的业务实现逻辑。
package main

import "fmt"

type BusinessService interface {
	DoProcessing()
}

type EJBService struct{}

func (e *EJBService) DoProcessing() {
	fmt.Println("Processing task by invoking EJB service")
}

type JMSService struct{}

func (j *JMSService) DoProcessing() {
	fmt.Println("Processing task by invoking JMS service")
}

type BusinessLookUp struct{}

func (b *BusinessLookUp) GetBusniessService(serviceType string) BusinessService {
	if serviceType == "EJB" {
		return &EJBService{}
	}
	return &JMSService{}
}

type BusinessDelegate struct {
	LookUpService   *BusinessLookUp
	BusinessService BusinessService
	ServiceType     string
}

func (b *BusinessDelegate) SetServiceType(serviceType string) {
	b.ServiceType = serviceType
}

func (b *BusinessDelegate) DoProcessing() {
	service := b.LookUpService.GetBusniessService(b.ServiceType)
	service.DoProcessing()
}

type Client struct {
	Service BusinessService
}

func NewClient(service BusinessService) *Client {
	return &Client{
		Service: service,
	}
}

func (c *Client) DoTask() {
	c.Service.DoProcessing()
}

func main() {
	delegate := &BusinessDelegate{LookUpService: &BusinessLookUp{}}
	delegate.SetServiceType("EJB")

	client := NewClient(delegate)
	client.DoTask()

	delegate.SetServiceType("JMS")
	client.DoTask()
}

原文 

http://violetzijing.is-programmer.com/posts/215460.html

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 设计模式 – 业务代表模式

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址