2静态代理模式-golang


代理模式(Proxy pattern)
-核心作用:
  通过代理,控制对对象的访问!
  可以详细控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法方法做后置处理。

  AOP(Aspect Oriented Promarmming面向切片编程)的核心实现机制。


  - 核心角色:
    a.抽象角色
      -定义代理角色和真实角色的公共对外的方法
    b.真实角色
      - 实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
      - 关注真正的业务逻辑
    c.代理角色
      - 实现抽象色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象对象方法,并可以附加自己的操作。
      - 将统一的流程控制放到代理角色中处理。

应用场景:
 a. 安全代理:屏蔽对真实角色的直接访问
 b. 远程代理:通过代理类处理远程方法调用(RMI)
 c. 延迟加载:通过加载轻量级的代理对象,真正需要再加载真实的对象


分类:
  静态代理(静态定义代理类)
  动态代理(动态生成代理类)
       

package staticProxy

import "fmt"

type Star interface {
	//面谈
	Confer()
	//签合同
	SignContract()
	//订票
	BookTicket()
	//唱歌
	Sing()
	//收钱
	CollectMoney()
}

type RealStar struct {
	Name string
}

func NewRealStar(name string) Star {
	return &RealStar{Name: name}
}



//面谈
func (this *RealStar)Confer(){
	fmt.Printf("%s---->面谈\n",this.Name)
}

//签合同
func (this *RealStar)SignContract(){
	fmt.Printf("%s---->签合同\n",this.Name)
}

//订票
func (this *RealStar)BookTicket(){
	fmt.Printf("%s---->订票\n",this.Name)
}

//唱歌
func (this *RealStar)Sing(){
	fmt.Printf("%s---->唱歌\n",this.Name)
}

//收钱地
func (this *RealStar)CollectMoney(){
	fmt.Printf("%s---->收钱\n",this.Name)
}


type Proxy struct {
	Name string
	star Star
}


func NewProxy(name string,star Star) Star  {
	return &Proxy{Name: name,star: star}
}



//面谈
func (this *Proxy)Confer(){
	fmt.Printf("%s---->面谈\n",this.Name)
}

//签合同
func (this *Proxy)SignContract(){
	fmt.Printf("%s---->签合同\n",this.Name)
}

//订票
func (this *Proxy)BookTicket(){
	fmt.Printf("%s---->订票\n",this.Name)
}

//唱歌
func (this *Proxy)Sing(){
	this.star.Sing()
}

//收钱地
func (this *Proxy)CollectMoney(){
	fmt.Printf("%s---->收钱\n",this.Name)
}


package staticProxy

import(
	"testing"
)

func Test_Proxy(t *testing.T){

	star := NewRealStar("周杰伦")
	proxy := NewProxy("A代理",star);

	proxy.Confer()
	proxy.SignContract()
	proxy.BookTicket()
	proxy.Sing()
	proxy.CollectMoney()

}

//result
go test -v 
=== RUN   Test_Proxy
A代理---->面谈
A代理---->签合同
A代理---->订票
周杰伦---->唱歌
A代理---->收钱
--- PASS: Test_Proxy (0.00s)
PASS
ok      mlemon_ssh/factory/proxy/staticProxy    0.394s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值