2静态代理模式-golang
发布时间:2021-12-30 编辑:jiaochengji.com
教程集为您提供2静态代理模式-golang等资源,欢迎您收藏本站,我们将为您提供最新的2静态代理模式-golang资源
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"/></svg><pre><code class="lang-go hljs">
代理模式<span class="token punctuation">(</span>Proxy pattern<span class="token punctuation">)</span>
<span class="token operator">-</span>核心作用<span class="token punctuation">:</span>
通过代理,控制对对象的访问!
可以详细控制访问某个<span class="token punctuation">(</span>某类<span class="token punctuation">)</span>对象的方法,在调用这个方法前做前置处理,调用这个方法方法做后置处理。
<span class="token function">AOP</span><span class="token punctuation">(</span>Aspect Oriented Promarmming面向切片编程<span class="token punctuation">)</span>的核心实现机制。
<span class="token operator">-</span> 核心角色:
a<span class="token punctuation">.</span>抽象角色
<span class="token operator">-</span>定义代理角色和真实角色的公共对外的方法
b<span class="token punctuation">.</span>真实角色
<span class="token operator">-</span> 实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
<span class="token operator">-</span> 关注真正的业务逻辑
c<span class="token punctuation">.</span>代理角色
<span class="token operator">-</span> 实现抽象色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象对象方法,并可以附加自己的操作。
<span class="token operator">-</span> 将统一的流程控制放到代理角色中处理。
应用场景:
a<span class="token punctuation">.</span> 安全代理<span class="token punctuation">:</span>屏蔽对真实角色的直接访问
b<span class="token punctuation">.</span> 远程代理<span class="token punctuation">:</span>通过代理类处理远程方法调用<span class="token punctuation">(</span>RMI<span class="token punctuation">)</span>
c<span class="token punctuation">.</span> 延迟加载<span class="token punctuation">:</span>通过加载轻量级的代理对象,真正需要再加载真实的对象
分类<span class="token punctuation">:</span>
静态代理<span class="token punctuation">(</span>静态定义代理类<span class="token punctuation">)</span>
动态代理<span class="token punctuation">(</span>动态生成代理类<span class="token punctuation">)</span>
<span class="token keyword">package</span> staticProxy
<span class="token keyword">import</span> <span class="token string">"fmt"</span>
<span class="token keyword">type</span> Star <span class="token keyword">interface</span> <span class="token punctuation">{</span>
<span class="token comment">//面谈</span>
<span class="token function">Confer</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token comment">//签合同</span>
<span class="token function">SignContract</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token comment">//订票</span>
<span class="token function">BookTicket</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token comment">//唱歌</span>
<span class="token function">Sing</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token comment">//收钱</span>
<span class="token function">CollectMoney</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token keyword">type</span> RealStar <span class="token keyword">struct</span> <span class="token punctuation">{</span>
Name <span class="token builtin">string</span>
<span class="token punctuation">}</span>
<span class="token keyword">func</span> <span class="token function">NewRealStar</span><span class="token punctuation">(</span>name <span class="token builtin">string</span><span class="token punctuation">)</span> Star <span class="token punctuation">{</span>
<span class="token keyword">return</span> <span class="token operator">&</span>RealStar<span class="token punctuation">{</span>Name<span class="token punctuation">:</span> name<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token comment">//面谈</span>
<span class="token keyword">func</span> <span class="token punctuation">(</span>this <span class="token operator">*</span>RealStar<span class="token punctuation">)</span><span class="token function">Confer</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"%s---->面谈\n"</span><span class="token punctuation">,</span>this<span class="token punctuation">.</span>Name<span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token comment">//签合同</span>
<span class="token keyword">func</span> <span class="token punctuation">(</span>this <span class="token operator">*</span>RealStar<span class="token punctuation">)</span><span class="token function">SignContract</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"%s---->签合同\n"</span><span class="token punctuation">,</span>this<span class="token punctuation">.</span>Name<span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token comment">//订票</span>
<span class="token keyword">func</span> <span class="token punctuation">(</span>this <span class="token operator">*</span>RealStar<span class="token punctuation">)</span><span class="token function">BookTicket</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"%s---->订票\n"</span><span class="token punctuation">,</span>this<span class="token punctuation">.</span>Name<span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token comment">//唱歌</span>
<span class="token keyword">func</span> <span class="token punctuation">(</span>this <span class="token operator">*</span>RealStar<span class="token punctuation">)</span><span class="token function">Sing</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"%s---->唱歌\n"</span><span class="token punctuation">,</span>this<span class="token punctuation">.</span>Name<span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token comment">//收钱地</span>
<span class="token keyword">func</span> <span class="token punctuation">(</span>this <span class="token operator">*</span>RealStar<span class="token punctuation">)</span><span class="token function">CollectMoney</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"%s---->收钱\n"</span><span class="token punctuation">,</span>this<span class="token punctuation">.</span>Name<span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token keyword">type</span> Proxy <span class="token keyword">struct</span> <span class="token punctuation">{</span>
Name <span class="token builtin">string</span>
star Star
<span class="token punctuation">}</span>
<span class="token keyword">func</span> <span class="token function">NewProxy</span><span class="token punctuation">(</span>name <span class="token builtin">string</span><span class="token punctuation">,</span>star Star<span class="token punctuation">)</span> Star <span class="token punctuation">{</span>
<span class="token keyword">return</span> <span class="token operator">&</span>Proxy<span class="token punctuation">{</span>Name<span class="token punctuation">:</span> name<span class="token punctuation">,</span>star<span class="token punctuation">:</span> star<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token comment">//面谈</span>
<span class="token keyword">func</span> <span class="token punctuation">(</span>this <span class="token operator">*</span>Proxy<span class="token punctuation">)</span><span class="token function">Confer</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"%s---->面谈\n"</span><span class="token punctuation">,</span>this<span class="token punctuation">.</span>Name<span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token comment">//签合同</span>
<span class="token keyword">func</span> <span class="token punctuation">(</span>this <span class="token operator">*</span>Proxy<span class="token punctuation">)</span><span class="token function">SignContract</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"%s---->签合同\n"</span><span class="token punctuation">,</span>this<span class="token punctuation">.</span>Name<span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token comment">//订票</span>
<span class="token keyword">func</span> <span class="token punctuation">(</span>this <span class="token operator">*</span>Proxy<span class="token punctuation">)</span><span class="token function">BookTicket</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"%s---->订票\n"</span><span class="token punctuation">,</span>this<span class="token punctuation">.</span>Name<span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token comment">//唱歌</span>
<span class="token keyword">func</span> <span class="token punctuation">(</span>this <span class="token operator">*</span>Proxy<span class="token punctuation">)</span><span class="token function">Sing</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
this<span class="token punctuation">.</span>star<span class="token punctuation">.</span><span class="token function">Sing</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token comment">//收钱地</span>
<span class="token keyword">func</span> <span class="token punctuation">(</span>this <span class="token operator">*</span>Proxy<span class="token punctuation">)</span><span class="token function">CollectMoney</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"%s---->收钱\n"</span><span class="token punctuation">,</span>this<span class="token punctuation">.</span>Name<span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token keyword">package</span> staticProxy
<span class="token keyword">import</span><span class="token punctuation">(</span>
<span class="token string">"testing"</span>
<span class="token punctuation">)</span>
<span class="token keyword">func</span> <span class="token function">Test_Proxy</span><span class="token punctuation">(</span>t <span class="token operator">*</span>testing<span class="token punctuation">.</span>T<span class="token punctuation">)</span><span class="token punctuation">{</span>
star <span class="token operator">:=</span> <span class="token function">NewRealStar</span><span class="token punctuation">(</span><span class="token string">"周杰伦"</span><span class="token punctuation">)</span>
proxy <span class="token operator">:=</span> <span class="token function">NewProxy</span><span class="token punctuation">(</span><span class="token string">"A代理"</span><span class="token punctuation">,</span>star<span class="token punctuation">)</span><span class="token punctuation">;</span>
proxy<span class="token punctuation">.</span><span class="token function">Confer</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
proxy<span class="token punctuation">.</span><span class="token function">SignContract</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
proxy<span class="token punctuation">.</span><span class="token function">BookTicket</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
proxy<span class="token punctuation">.</span><span class="token function">Sing</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
proxy<span class="token punctuation">.</span><span class="token function">CollectMoney</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token comment">//result</span>
<span class="token keyword">go</span> test <span class="token operator">-</span>v
<span class="token operator">==</span><span class="token operator">=</span> RUN Test_Proxy
A代理<span class="token operator">--</span><span class="token operator">--</span><span class="token operator">></span>面谈
A代理<span class="token operator">--</span><span class="token operator">--</span><span class="token operator">></span>签合同
A代理<span class="token operator">--</span><span class="token operator">--</span><span class="token operator">></span>订票
周杰伦<span class="token operator">--</span><span class="token operator">--</span><span class="token operator">></span>唱歌
A代理<span class="token operator">--</span><span class="token operator">--</span><span class="token operator">></span>收钱
<span class="token operator">--</span><span class="token operator">-</span> PASS<span class="token punctuation">:</span> Test_Proxy <span class="token punctuation">(</span><span class="token number">0.00</span>s<span class="token punctuation">)</span>
PASS
ok mlemon_ssh<span class="token operator">/</span>factory<span class="token operator">/</span>proxy<span class="token operator">/</span>staticProxy <span class="token number">0.394</span>s
</code></pre>
到此这篇关于“2静态代理模式-golang”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!
您可能感兴趣的文章:
php 伪静态 url重写简单示例
php页面静态化的小例子
深入理解c# static 静态数据成员和方法
伪静态几种做法
golang和python有什么区别?
php模版生成html的小例子
深入理解[代理模式]原理与技术
为什么要学 Go
php static静态属性和静态方法的调用
PHP单例模式静态类解析和实现源代码
[关闭]