1. 程式人生 > 其它 >Java學習之靜態代理和動態代理

Java學習之靜態代理和動態代理

0x00 靜態代理

優點:可以在不改變目標物件的前提下擴充套件目標物件的功能
缺點:介面增加新的功能後,目標物件和代理物件都需要進行修改
介面類(IUserDao.java)

package com.proxy;

public interface IUserDao {
    public void save();
}

目標物件(UserDao.java)

package com.proxy;

public class UserDao implements IUserDao{

    @Override
    public void save(){
        System.out.println("儲存資料");
    }
}

代理物件(UserDaoProxy.java)

必須實現介面

package com.proxy;

public class UserDaoProxy implements IUserDao{

    private IUserDao target;
    public UserDaoProxy(IUserDao target){
        this.target = target;
    }

    @Override
    public void save() {
        System.out.println("開啟事務");
        target.save();
        System.out.println("提交事務");
    }
}

測試類(TestProxy.java)

package com.proxy;

import org.junit.Test;

public class TestProxy {
    @Test
    public void testStaticProxy(){
        IUserDao target = new UserDao();
        UserDaoProxy proxy = new UserDaoProxy(target);
        proxy.save();
    }

}