国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

漫談代理模式

neuSnail / 3039人閱讀

摘要:而在模式中角色與角色的接口是相同的透明性。而在模式中與增加新功能相比它更注重通過設置代理人的方式來減輕本人的工作負擔

本文首發于泊浮目的專欄:https://segmentfault.com/blog...
前言

代理模式是在編程中非常常見的設計模式.筆者在面試的過程中也經常會問到相關的問題,但是很多同學答的并不盡人意.在這篇文章中,筆者想和大家聊聊代理模式的應用及一些實踐.

What

先來一張圖

我們可以很明顯的看到,代理和客戶端發生了耦合,而目標端則與客戶端解耦.

Why

上文提到了一點,松耦合.而在任何設計模式中,他們的目的都在以下范圍內:

減少代碼冗余度,提高代碼復用性

松耦合

這里提到了代碼的復用性,也可以多嘴一句,代理模式可以幫助我們實現The Open Closed Principle.

在這里,我們可以舉一個例子.Target可能是一位不錯的程序員,client是一家公司.在整個招聘流程中,如果Proxy是獵頭,有些獵頭則可能會想辦法幫程序員提高身價.而如果Proxy是Hr,則可能會來殺殺價.而程序員走的流程可能一直是一樣的:

電面

到面

簽合同

我們可以把不同的行為(討價還價的特殊技巧)寫在不同的Proxy里(HrProxy or 獵頭Proxy),而我們的程序員只要專心走流程就行了.

How

以Java中最常用的框架——Spring為例.Spring最主要提供了2個功能:

IOC(Inversion of Control)

AOP(Aspect Oriented Programming)

而我們知道,Spring的AOP本質上是通過代理模式來做的.接下來我們來詳細聊聊Spring提供的4種類型的AOP支持:

基于代理的經典Spring AOP;

純POJO切面;

@AspectJ注解驅動的切面;

注入式AspectJ切面(適用于Spring各版本)。

前三種都是Spring AOP實現的變體,Spring AOP構建在動態代理基礎之上,因此,Spring對AOP的支持局限于方法攔截。

而SpringAOP支持兩種模式的動態代理,JDK Proxy和cglib.當Spring發現目標被代理類實現就接口時,則用JDK Proxy來實現.

JDK Proxy不完全通過反射來做,也有ASM進行字節碼操作的.本質是通過接口約定來做的

cglib完全通過ASM字節碼來做.本質通過繼承的方式實現

代碼大概長這樣:

//spring aop 生成的代理
public class SpringAopTargetProxy extends Target{
    public void  operate(){
            //spring aop method1...
            super.operate();
           //spring aop method2...
    }
}

而AspectJ是通過編譯時編織來做的,即在編譯時插代碼進去.所以可以認為它基于靜態代理來做AOP.

基于以上,我們也可以推導出SpringAOP對于finalorstatic方法是無效的.

callexecution有什么區別呢?

call就是在調用這個方法的地方插入代碼

execution就是在調用這個方法的前面插入代碼

代理模式的變化形式

之前,我們根據代理生成的時機來區分了靜態代理和動態代理.而根據使用方式,常見則有兩類:

Virtual Proxy:只有當真正需要實例時,它才生成和初始化實例

Remote Proxy:遠程代理可以讓我們不必關心RealSubject角色是否在網絡上,而是像調本地方法一樣調用它的方法.Java的RMI(Remote Method Invocation)就相當于遠程代理.

類似的設計模式 Adapter

Adapter模式適配了兩種具有不同接口(API)的對象,以使它們可以一同工作。而在Proxy模式中, Proxy角色與RealSubject角色的接口(API )是相同的(透明性)。

Decorator

Decorator模式與Proxy模式在實現上很相似(比如API的一致性),不過它們的使用目的不同——Decorator模式的目的在于增加新的功能。而在Proxy模式中,與增加新功能相比,它更注重通過設置代理人的方式來減輕本人的工作負擔.

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74343.html

相關文章

  • 漫談Web緩存

    摘要:了解前端緩存是打造高性能網站的必要知識。這個表示,你的請求發送到后端,后端判斷并認為資源可以繼續使用,直接使用本地緩存。盡可能的設置久緩存時間,通過碼來管理版本。參考鏈接淺談緩存權威指南上配置緩存首發地址 背景說明 緩存一直是前端性能優化中,濃墨重彩的一筆。了解前端緩存是打造高性能網站的必要知識。 之前,對于緩存的認知一直停留在看《HTTP權威指南》和一些相關帖子的深度,過了一段時...

    davidac 評論0 收藏0
  • 漫談Web緩存

    摘要:了解前端緩存是打造高性能網站的必要知識。這個表示,你的請求發送到后端,后端判斷并認為資源可以繼續使用,直接使用本地緩存。盡可能的設置久緩存時間,通過碼來管理版本。參考鏈接淺談緩存權威指南上配置緩存首發地址 背景說明 緩存一直是前端性能優化中,濃墨重彩的一筆。了解前端緩存是打造高性能網站的必要知識。 之前,對于緩存的認知一直停留在看《HTTP權威指南》和一些相關帖子的深度,過了一段時...

    Carl 評論0 收藏0
  • 漫談Web緩存

    摘要:了解前端緩存是打造高性能網站的必要知識。這個表示,你的請求發送到后端,后端判斷并認為資源可以繼續使用,直接使用本地緩存。盡可能的設置久緩存時間,通過碼來管理版本。參考鏈接淺談緩存權威指南上配置緩存首發地址 背景說明 緩存一直是前端性能優化中,濃墨重彩的一筆。了解前端緩存是打造高性能網站的必要知識。 之前,對于緩存的認知一直停留在看《HTTP權威指南》和一些相關帖子的深度,過了一段時...

    shuibo 評論0 收藏0
  • 如何應對服務器壓力?服務器橫向擴展(加機器)策略漫談

    摘要:均衡負載多臺服務器執行程序,將大量請求分攤給多臺服務器無論如何,一臺服務器的進程是有限的,我們不可能無限制的把一臺服務器的加到個,把內存加到,則是不可能的。 在生產環境中,一個網站或服務端應用出現響應遲緩的時候,就應該考慮是否由于用戶量太多,導致服務器難以處理的情況,并應該考慮花錢來解決這個問題。當然,這里首先會想到廉價的解決方式,比如通過調整服務器配置,優化代碼性能等,但這些方式技術...

    he_xd 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<