靜态代理模式很簡單,代理類和實作類都實作相同的接口,然後通過代理類來調用實作類的方法。
如我們想儲存使用者資訊之前列印使用者資訊,或者儲存使用者資訊之後把這些資訊緩存下來,即在運作方法前後插入執行一個别的操作,下面是一個簡單的示例。
使用者接口
public interfaceUserInterface{
boolean saveUser(User user);
}
使用者接口實作
public classUserInterfaceImplimplements UserInterface {
@Override
public boolean saveUser(User user) {
System.out.println("儲存使用者: " + user.getName());
return true;
public classTest{
public static void main(String[] args) {
testStaticProxy();
private static voidtestStaticProxy() {
User user = new User();
user.setName("tom");
new StaticProxy(new UserInterfaceImpl()).saveUser(user);
static class StaticProxy implements UserInterface {
private UserInterface userInterface;
public StaticProxy(UserInterface userInterface) {
this.userInterface = userInterface;
System.out.println("靜态代理-開始儲存使用者");
boolean result = userInterface.saveUser(user);
System.out.println("靜态代理-儲存使用者結果: " + result);
System.out.println();
return result;
結果輸出:
靜态代理-開始儲存使用者
儲存使用者: tom
靜态代理-儲存使用者結果: true
通過代碼實戰的方法學習設計模式,是不是覺得靜态代理很簡單了?
下面問題來了,如果我們想把使用者接口内所有的方法都要代理,那我們所有的方法都要代理一遍,又或者之後又添加了新的方法,那又得重新寫代理,十分麻煩,明天分享下動态代理的實作,解決了靜态代理的不便擴充性。