靜態代理的角色分析:
抽象角色——一般使用接口或者抽象類來實現。
真實角色——被代理的角色
代理角色——代理真實角色—代理真實角色後一般會做一些附屬操作。
客戶——使用代理角色來進行一些操作
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+"方法");
}
}