1. 程式人生 > 其它 >代理模式之靜態代理

代理模式之靜態代理

技術標籤:Java學習筆記java設計模式多型

代理模式分為靜態代理和動態代理,本篇文章談談我對於靜態代理的理解。

還是先上程式碼

//一個名為網路的介面
interface NetWork{
	public void browser();
}
//被代理類,網路服務
class Server implements NetWork{
	@Override
	public void browser() {
		System.out.println("被代理類");
	}
}
//代理類
class ProxyServer implements NetWork{

	private
NetWork netWork; //代理類的構造器 public ProxyServer(NetWork netWork){ this.netWork = netWork; } public void check(){ System.out.println("檢查網路"); } @Override public void browser() { check(); netWork.browser();//代理類呼叫被代理類的方法 } }
//主函式
public static void main(String[] args) {
		//通過Server新生成了一個物件server,server是被代理類的物件
Server server = new Server(); /*通過ProxyServer新生成了一個物件proxyServer , 然後將sever賦值給了proxyServer */ ProxyServer proxyServer = new ProxyServer(server); //通過proxyServer 呼叫browser()方法 proxyServer.browser(); }

執行結果:
在這裡插入圖片描述

代理類和被代理類要實現介面,所以兩個類中都要覆蓋介面中的browser()方法。
我們來梳理一下程式碼的執行過程,
呼叫的browser方法是屬於代理類中的browser方法,但是由於代理類中的browser方法又呼叫了被代理類中的browser方法,所以被代理類的browser方法得以被呼叫。

而做到讓被代理方法可以呼叫代理方法中的browser方法的是介面NetWork,代理類的構造器是有參的,它的引數就是NetWork型別的變數,我們是通過NetWork型別的變數呼叫了被代理類的browser方法。

ProxyServer proxyServer = new ProxyServer(server);
/*這行程式碼就是多型性的體現,
宣告的是ProxyServer 型別,
但是引用卻是Server型別的*/

如果熟悉多型的知識,那麼這個方法的呼叫過程理解起來就容易多了。

代理模式就是為了擴充套件功能,同時還保有被代理類的功能。