1. 程式人生 > >使用代理類增強業務類的功能示例

使用代理類增強業務類的功能示例

有時我們想要對原有的專案新增業務功能,又不想去修改原有程式碼中的業務類,那麼我們可以使用代理類來實現該做法,在不改變原有業務類的基礎上增強業務類的功能,下面

建立一個簡單的示例介紹:

①新建一個測試應用(AgencyDemo)


② 新增處理學生業務的介面StudentDao

public interface StudentDao {
    public void add();
}

③ 處理學生業務介面的實現類 StudentDaoImpl
public class StudentDaoImpl implements StudentDao{

    public void add() {
        //這裡是你新增的繁雜業務,在這裡只是示範作用
        System.out.println("執行新增學生的新增....");
    }
    
    //通過該方法我們可以看到,在該實現類中只有一個新增學生的方法,那麼此時如果我們在執行add之前先開啟業務,
    //,結束時關閉業務,而又不想在這裡修改實現類的程式碼,我們可以採用代理類
}

④ 新建學生的代理類並繼承業務介面 StudentDaoAgency

public class StudentDaoAgency implements StudentDao{
    private StudentDao target;//被代理的物件
    
    //在初始化的時候將被代理的物件傳遞進來
    public StudentDaoAgency(StudentDao target) {
        this.target = target;
    }
    
    //在代理類中實現增強原有業務類
    public void add() {
        System.out.println("開啟事務....");
        target.add();//執行被代理物件的方法
        System.out.println("提交事務....");
    }
}

⑤ 編寫測試方法 StudentTest 測試業務類和代理類實現的功能
<pre name="code" class="java">public class StudentTest {
    
    public static void main(String[] args) {
        //原有的方法只能輸入一項功能
        System.out.println("通過原有業務類處理...");
        StudentDao studentDao = new StudentDaoImpl();
        studentDao.add();
        
        System.out.println();
        
        //通過代理伺服器實現新增功能
        System.out.println("通過代理類處理...");
        StudentDao studentDaoAgency = new StudentDaoAgency(new StudentDaoImpl());
        studentDaoAgency.add();
        
    }
}


通過測試我們可以的到一下的結果:

通過原有業務類處理:
執行新增學生的新增....


通過代理類處理:
開啟事務....
執行新增學生的新增....
提交事務....

到這裡代理類實現了增強業務功能但是不改變原有的程式碼,希望能夠幫助到你理解代理類的用法及其功能!!