Java二十三種設計模式中的代理模式
阿新 • • 發佈:2020-12-12
技術標籤: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 ();
}
}
輸出結果
執行順序是這樣的
-
Test中
SingerProxy singerProxy = new SingerProxy(new Singer())
例項化現代歌手,把遠古歌手唱的歌塞到SingerProxy的構造方法中 -
然後走輸出演唱會
-
再走現代歌手物件的唱歌方法,之前已經把遠古歌手唱的歌塞到構造方法中了,所以現代歌手再唱歌唱的就是經典歌曲了
其實代理模式,就是用一個新的類(現代歌手),把介面(歌手都要唱歌)以及實現類(遠古歌手),重新編寫一次,這個類就可以叫做代理類