阿里雲大學JavaWeb開發系列課程:Spring框架入門第九講代理的講解

靜態代理的角色分析:

抽象角色——一般使用接口或者抽象類來實現。

真實角色——被代理的角色

代理角色——代理真實角色—代理真實角色後一般會做一些附屬操作。

客戶——使用代理角色來進行一些操作

Client.java(客戶)

package cn.sxt.staticproxy;

public class Client {
	public static void main(String[] args) {
		Host host=new Host();
		Proxy proxy=new Proxy(host);
		proxy.rent();
	}
}

Proxy.java(代理角色)

package cn.sxt.staticproxy;

public class Proxy implements Rent{
	private Host host;
	public Proxy() {
	}
	public Proxy(Host host) {
		this.host=host;
	}
	public void setHost(Host host) {
		this.host = host;
	}
	//租房
	public void rent() {
		seeHouse();
		host.rent();
		fare();
	}
	//看房
	private void seeHouse() {
		System.out.println("帶房客看房");
	}
	//收中介費
	private void fare() {
		System.out.println("收取中介費");
	}
}

Host.java(真實角色)

package cn.sxt.staticproxy;

public class Host {
	public void rent() {
		System.out.println("房屋出租");
	}
}

Rent.java(接口)(抽象角色)

package cn.sxt.staticproxy;

public interface Rent {
	public void rent() ;
}

staruml-5.0-with-cm

軟件下載鏈接staruml-5.0-with-cm

最終類圖如上

使用靜態代理的好處:

使得真實角色處理的業務更加純粹,不再去關注一些公共的事情。

公共的業務由代理來完成——實現了業務的分工

公共業務發生擴展時變得更加集中和方便

缺點:

類多了——多了代理類,工作量變大了。開發效率降低了

第二個案例

UserService.java(接口)

package cn.sxt.service;

public interface UserService {
	public void add();
	public void update();
	public void delete();
	public void search();
	
}

UserServiceImpl.java

package cn.sxt.service;

public class UserServiceImpl implements UserService{
	public void add() {
		System.out.println("增加用戶");
	}
	public void update() {
		System.out.println("修改用戶");
	}
	public void delete() {
		System.out.println("刪除用戶");
	}
	public void search() {
		System.out.println("查詢用戶");
	}

}

UserServiceProxy.java

package cn.sxt.service;

public class UserServiceProxy implements UserService{
	private UserService userService;
	public void add() {
		log("add");
		userService.add();
	}
	public void delete() {
		log("delete");
		userService.delete();
	}
	public void search() {
		log("search");
		userService.search();
	}
	public void update() {
		log("update");
		userService.update();
	}
	public void log(String methodName) {
		System.out.println("執行"+methodName+"方法");
	}
}

 

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