1. 程式人生 > 其它 >Java二十三種設計模式中的代理模式

Java二十三種設計模式中的代理模式

技術標籤:java

首先建立一個介面,來表示歌手,所有的歌手都會唱歌

public interface Sing {
    //所有的歌手都會唱歌
    void Sing();
}

遠古時期。。。。有一個歌手,這個歌手唱的歌特別的經典,好聽
所以實現歌手的介面

public class Singer implements Sing{
    //遠古歌手
    @Override
    public void Sing() {
        System.out.println("經典歌曲");
    }
}

現在呢。。。有一個歌手要唱歌,上來就唱了一首經典歌曲曲來致敬遠古大佬

當然他也是歌手,也要實現歌手唱歌這個介面

至於SingerProxy的構造方法我下面再解釋

/**
 *  代理物件和目標物件實現相同的介面
 */
public class SingerProxy implements Sing{
    Sing sing;
    public SingerProxy(Sing s){
        this.sing = s;
    }
    @Override
    public void Sing() {
        System.out.println("觀眾們好,我唱一個");
        sing.Sing
(); System.out.println("謝謝再見"); } }

現在搞一個測試,開個演唱會 讓當代歌手唱個歌
public class Test {

public class Test {
    public static void main(String[] args) {
        SingerProxy singerProxy = new SingerProxy(new Singer());
        System.out.println("演唱會");
        singerProxy.Sing
(); } }

輸出結果
在這裡插入圖片描述

執行順序是這樣的

  1. Test中
    SingerProxy singerProxy = new SingerProxy(new Singer())
    例項化現代歌手,把遠古歌手唱的歌塞到SingerProxy的構造方法中

  2. 然後走輸出演唱會

  3. 再走現代歌手物件的唱歌方法,之前已經把遠古歌手唱的歌塞到構造方法中了,所以現代歌手再唱歌唱的就是經典歌曲了

其實代理模式,就是用一個新的類(現代歌手),把介面(歌手都要唱歌)以及實現類(遠古歌手),重新編寫一次,這個類就可以叫做代理類