zoukankan      html  css  js  c++  java
  • 【Golang设计模式】3.代理模式

    3. 代理模式

    代理模式,为其它对象提供一种代理以控制对这个对象的访问。

    比如小明向小红写情书,但是又不好意思直接给小红,于是就让小军替自己给小红。

    在路径proxy下新建文件proxy.go,包名为proxy

    package proxy
    
    // ...
    

    定义小红和发送消息的接口:

    type Girl struct {
    	Name string
    }
    
    // 发送消息的接口
    type SendMsger interface {
    	SendMsg(*Girl)
    }
    

    定义真实对象和真实对象的发送方法:

    // 真实对象
    type TrueLove struct {
    	Name string
    }
    
    // 真实对象的发送动作
    func (p *TrueLove) SendMsg(g Girl) {
    	fmt.Printf("[%s], 这是[%s]给你的情书
    ", g.Name, p.Name)
    }
    

    定义代理对象、代理对象对真实对象的包装和代理对象的发送方法:

    // 代理对象
    type Proxy struct {
    	Name string
    	TrueLove
    }
    
    // 代理对象对真实对象进行包装
    func (p *Proxy) Wrap(t TrueLove) {
    	p.TrueLove = t
    }
    
    // 代理对象的发送动作
    func (p *Proxy) SendMsg(g Girl) {
    	p.TrueLove.SendMsg(g) // 调用真实对象的方法
    	fmt.Printf("——来自[%v]
    ", p.Name)
    }
    

    在路径proxy的同级目录下新建main.go用于测试方法:

    package main
    
    import (
    	"fmt"
    	"github.com/loveshes/go-design-patterns/pattern/proxy-pattern/proxy"
    )
    
    func main() {
    	girl := proxy.Girl{"小红"}
    	trueLove := proxy.TrueLove{"小明"}
    	trueLove.SendMsg(girl)
    	fmt.Println()
    
    	proxy := proxy.Proxy{Name: "工具人小军"}
    	proxy.Wrap(trueLove)
    	proxy.SendMsg(girl)
    }
    

    输出为

    [小红], 这是[小明]给你的情书
    
    [小红], 这是[小明]给你的情书
    ——来自[工具人小军]
    

    完整示例

  • 相关阅读:
    POJ2352
    POJ 2524 并查集
    A POJ1611
    树状dp--B
    spring mvc实现文件上传与下载
    Joda-Time
    JAVA对象与JSON之间的转换
    jackson-databind注解
    JPA注解
    springMVC、spring、jpa、springData整合配置
  • 原文地址:https://www.cnblogs.com/loveshes/p/12734990.html
Copyright © 2011-2022 走看看