代理模式總結-靜態代理

------- android培訓java培訓、期待與您交流! ----------


        代理模式是常用的java設計模式,他的特徵是代理類與委託類有同樣的接口,代理類主要負責爲委託類預處理消息、過濾消息、把消息轉發給委託類,以及事後處理消息等。代理類與委託類之間通常會存在關聯關係,一個代理類的對象與一個委託類的對象關聯,代理類的對象本身並不真正實現服務,而是通過調用委託類的對象的相關方法,來提供特定的服務。 
按照代理的創建時期,代理類可以分爲兩種。 
靜態代理:由程序員創建或特定工具自動生成源代碼,再對其編譯。在程序運行前,代理類的.class文件就已經存在了。 
動態代理:在程序運行時,運用反射機制動態創建而成。 

需求:

1、使用靜態代理模式,對數據庫中的數據進行增刪改查操作

2、對每一個操作,都需要對其進行日誌記錄

那麼我們先以靜態代理進行示例展示

1、接口StaticProxy_Interface 

package com.proxy.static_proxy;
/*
 * 演示靜態代理類
 * 
 * 功能:定義一個接口,用於對數據庫進行操作
 * 
 * @author lijl
 * */
public interface StaticProxy_Interface {
	//插入
	public void Insert();
	
	//刪除
	public void Delete();
	//修改
	public void Update();

	//查詢
	public void Select();
	
}


2、StaticProxy_Impl 委託類

package com.proxy.static_proxy;
/*
 * 演示靜態代理類
 * 
 * 功能:業務邏輯類,即委託類
 * 本類實現StaticProxy_Interface接口,對數據庫的模擬增刪改查功能
 * 
 * @author lijl 
 * */
public class StaticProxy_Impl implements StaticProxy_Interface {

	@Override
	public void Insert() {
		// TODO Auto-generated method stub
		System.out.println("StaticProxy_Impl.Insert()...........");

	}

	@Override
	public void Delete() {
		// TODO Auto-generated method stub
		System.out.println("StaticProxy_Impl.Delete()...........");
	}

	@Override
	public void Update() {
		// TODO Auto-generated method stub
		System.out.println("StaticProxy_Impl.Update()...........");
	}

	@Override
	public void Select() {
		// TODO Auto-generated method stub
		System.out.println("StaticProxy_Impl.Select()...........");
	}

}


3、靜態代理類StaticProxy 

package com.proxy.static_proxy;

/*
 * 演示靜態代理類
 * 
 * 功能:靜態代理類
 * 本類實現StaticProxy_Interface接口,對數據庫的每一個操作,都需要留下日誌痕跡
 * 
 * @author lijl 
 * */
public class StaticProxy implements StaticProxy_Interface {
	//由於需要對數據庫的增刪改查等操作留下日誌,那麼需要傳遞進來對數據庫進行操作的業務邏輯類,即委託類對象staticproxy_impl
	private StaticProxy_Impl staticproxy_impl;
	public StaticProxy(StaticProxy_Impl staticproxy_impl){
		this.staticproxy_impl = staticproxy_impl;
	}
	@Override
	
	public void Insert() {
		// TODO Auto-generated method stub
		System.out.println("StaticProxy.Insert()..begin..");
		staticproxy_impl.Insert();//對插入數據庫操作,前後加入begin end 日誌
		System.out.println("StaticProxy.Insert()..end..");
	}

	@Override
	public void Delete() {
		// TODO Auto-generated method stub
		System.out.println("StaticProxy.Delete()..begin..");
		staticproxy_impl.Delete();//對刪除數據庫操作,前後加入begin end 日誌
		System.out.println("StaticProxy.Delete()..end..");
	}

	@Override
	public void Update() {
		// TODO Auto-generated method stub
		System.out.println("StaticProxy.Update()..begin..");
		staticproxy_impl.Update();//對更新數據庫操作,前後加入begin end 日誌
		System.out.println("StaticProxy.Update()..end..");
	}

	@Override
	public void Select() {
		// TODO Auto-generated method stub
		System.out.println("StaticProxy.Select()..begin..");
		staticproxy_impl.Select();//對查詢數據庫操作,前後加入begin end 日誌
		System.out.println("StaticProxy.Select()..end..");

	}

}


4、


package com.proxy.static_proxy;
/*
 * 演示靜態代理類
 * 
 * 功能:主函數,執行靜態代理類(執行委託類並且帶日誌功能)
 * 
 * 1、創建委託類(業務邏輯類)對象
 * 2、創建靜態代理類對象,將委託類對象作爲參數,傳遞到StaticProxy構造方法中
 * 
 * @author lijl 
 * */
public class StaticProxy_main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		StaticProxy_Impl spi = new StaticProxy_Impl();
		StaticProxy sp = new StaticProxy(spi);
		sp.Insert();
		sp.Select();
		sp.Update();
		sp.Delete();
		
		
	}

}



總結:從以上例子中就可以看出靜態代理類的功能,

 這裏舉一個比較形象的例子,比如有三個對象:思科服務器生產商、服務器代理商、用戶
  
  1、用戶想要去買思科服務器,當然也需要售後的保障(思科服務器好比StaticProxy_Interface接口類)
  2、用戶最終要的結果是:買,那麼買,那麼以面向對象的思維看待StaticProxy_Interface接口,實際上就是StaticProxy_Interface接口需要有被人買的動作,那麼這個接口就需要定義買的動作, 即本例中的增刪改查
  3、那麼思科服務器,從哪裏來呢?首先思科服務器是由生產商生產的,那麼肯定生產商要去實現StaticProxy_Interface接口,重寫裏面的方法,買的動作,即StaticProxy_Impl。
 
  4、由於思科生產商,自己不去單獨賣服務器,需要去委託給代理商外賣,即將服務器交給代理商,而且代理商要給用戶提供售後的服務,在本例中就是StaticProxy代理類,StaticProxy代理類中需要有StaticProxy_Impl生產商給的服務器對象即設計StaticProxy時,構造方法需要傳遞服務器StaticProxy_Impl並且對思科服務器的每一個產品,進行售後服務,即代理類StaticProxy中的增刪改方法中需要有日誌功能
 
  5、當用戶去買服務器的時候,即main函數,去代理商StaticProxy這裏買,前提供貨商StaticProxy_Impl需要把服務器交給代理商StaticProxy



 -------android培訓JAVA培訓、期待與您交流! ----------

--------詳細請查看www.itheima.com-------------


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章