java的靜態代理

若是我要訪問一個明星,我不可能直接去找明星,也根本找不到,這個時候,我就只能找他的經紀人。測試

代理是同樣的,this

若是一個對象想要訪問另外一個對象,可是不能直接訪問到,或者不想直接訪問到,那麼就須要一箇中間人,至關於一個經紀人同樣的角色,就是代理對象.net

代理對象能找到咱們要訪問的真實對象嗎?答案是確定的,否則要他幹嗎,就像是,經紀人確定能找到明星代理

代理對象怎麼找到真實對象呢?那是由於代理對象持有一個真實對象的引用對象

/**
 * 代理類
 * Created by lidongyang on 2017/8/22 0022.
 */
public class Broker implements Person{
    //真實對象的引用
    private SuperStar linzhiling;

    public Broker(SuperStar linzhiling){
        this.linzhiling = linzhiling;
    }


    public void getMsg() {

        System.out.println("經紀人某某某");

        if(null == linzhiling){
            linzhiling = new SuperStar();
        }
        linzhiling.getMsg();
        System.out.println("您好,您是?");
    }
}
/**
 * 真實類
 * Created by lidongyang on 2017/8/22 0022.
 */
public class SuperStar implements Person{

    public void getMsg(){
        System.out.println("我叫林志玲,我是個明星");
    }

}
/**
 * 共同實現的接口,抽象類也可
 * Created by lidongyang on 2017/8/22 0022.
 */
public interface Person {
    void getMsg();
}
/**
 * 測試方法
 * Created by lidongyang on 2017/8/21 0021.
 */
public class LockTest{

    public static void main(String[] args) {
        Broker broker = new Broker(new SuperStar());
        broker.getMsg();
    }
}

輸出blog

不難看出,若是一個對象須要代理類的話,每次都須要新建一個代理類,若是每一個類都須要一個代理類,那得多少代理類,太痛苦了。並且這個真實的類必須是已知的接口

怎麼解決這個難題呢,答案就是動態代理,動態代理另一片文章寫get

cglib動態代理地址:http://www.javashuo.com/article/p-hnstkwab-mv.htmlclass

jdk動態代理地址:http://www.javashuo.com/article/p-cewhubet-mu.htmljdk

相關文章
相關標籤/搜索