golang " />

扫描二维码下载沐宇APP

沐宇

微信扫码使用沐宇小程序

沐宇

Golang鍔ㄦ€佷唬鐞嗘ā寮忔€庝箞瀹炵幇

扬州沐宇科技
2023-11-09 21:03:13
golang

鍦℅olang涓疄鐜板姩鎬佷唬鐞嗘ā寮忓彲浠ヤ娇鐢ㄥ弽灏勬潵瀹炵幇銆傚湪鍔ㄦ€佷唬鐞嗘ā寮忎腑锛屼唬鐞嗗璞℃嫤鎴苟澶勭悊琚唬鐞嗗璞$殑鏂规硶璋冪敤銆?/p>

涓嬮潰鏄竴涓畝鍗曠殑绀轰緥浠g爜锛屾紨绀轰簡濡備綍浣跨敤鍙嶅皠瀹炵幇鍔ㄦ€佷唬鐞嗘ā寮忥細

package main

import (
	"fmt"
	"reflect"
)

// 瀹氫箟琚唬鐞嗙殑鎺ュ彛
type Subject interface {
	Do() string
}

// 琚唬鐞嗙殑瀵硅薄
type RealSubject struct{}

func (r *RealSubject) Do() string {
	return "RealSubject: handling request"
}

// 瀹氫箟浠g悊瀵硅薄
type Proxy struct {
	realSubject Subject
}

func (p *Proxy) Do() string {
	// 鍦ㄥ鐞嗗墠鐨勯澶栨搷浣?/span>
	fmt.Println("Proxy: before handling request")

	// 浣跨敤鍙嶅皠璋冪敤琚唬鐞嗗璞$殑鏂规硶
	result := reflect.ValueOf(p.realSubject).MethodByName("Do").Call(nil)[0].String()

	// 鍦ㄥ鐞嗗悗鐨勯澶栨搷浣?/span>
	fmt.Println("Proxy: after handling request")

	return result
}

func main() {
	realSubject := &RealSubject{}
	proxy := &Proxy{realSubject: realSubject}

	result := proxy.Do()
	fmt.Println(result)
}

鍦ㄤ笂闈㈢殑浠g爜涓紝棣栧厛瀹氫箟浜嗕竴涓?code>Subject鎺ュ彛锛岃鎺ュ彛鏈変竴涓?code>Do鏂规硶銆傜劧鍚庯紝鍒涘缓浜嗕竴涓?code>RealSubject瀵硅薄鏉ュ疄鐜拌鎺ュ彛锛屽苟瀹炵幇浜?code>Do鏂规硶銆?/p>

鎺ヤ笅鏉ワ紝鍒涘缓浜嗕竴涓?code>Proxy瀵硅薄锛岃瀵硅薄鍖呭惈涓€涓寚鍚?code>RealSubject瀵硅薄鐨勫紩鐢ㄣ€?code>Proxy瀵硅薄瀹炵幇浜?code>Subject鎺ュ彛锛屽綋璋冪敤Do鏂规硶鏃讹紝浼氬厛鎵ц涓€浜涢澶栫殑鎿嶄綔锛岀劧鍚庝娇鐢ㄥ弽灏勮皟鐢ㄨ浠g悊瀵硅薄鐨?code>Do鏂规硶锛屽苟鏈€缁堣繑鍥炵粨鏋溿€?/p>

鍦?code>main鍑芥暟涓紝鍒涘缓浜嗕竴涓?code>RealSubject瀵硅薄鍜屼竴涓?code>Proxy瀵硅薄锛屽苟璋冪敤浜?code>Proxy瀵硅薄鐨?code>Do鏂规硶锛岃緭鍑轰簡鏈€缁堢殑缁撴灉銆?/p>

扫码添加客服微信