1. Proxy Pattern

The proxy pattern provides an object that controls access to another object, intercepting all calls.

1.1. Implementation

The proxy could interface to anything: a network connection, a large object in memory, a file, or some other resource that is expensive or impossible to duplicate.

Short idea of implementation:

    // To use proxy and to object they must implement same methods
    type IObject interface {
        ObjDo(action string)

    // Object represents real objects which proxy will delegate data
    type Object struct {
        action string

    // ObjDo implements IObject interface and handel's all logic
    func (obj *Object) ObjDo(action string) {
        // Action behavior
        fmt.Printf("I can, %s", action)

    // ProxyObject represents proxy object with intercepts actions
    type ProxyObject struct {
        object *Object

    // ObjDo are implemented IObject and intercept action before send in real Object
    func (p *ProxyObject) ObjDo(action string) {
        if p.object == nil {
            p.object = new(Object)
        if action == "Run" {
            p.object.ObjDo(action) // Prints: I can, Run

1.2. Usage

More complex usage of proxy as example: User creates "Terminal" authorizes and PROXY send execution command to real Terminal object See proxy/main.go or view in the Playground.

Copyright © studygolang.com 2013 all right reserved,powered by Gitbook该文件修订时间: 2017-07-21 20:30:35

results matching ""

    No results matching ""