使用代理類增強業務類的功能示例
阿新 • • 發佈:2019-02-17
有時我們想要對原有的專案新增業務功能,又不想去修改原有程式碼中的業務類,那麼我們可以使用代理類來實現該做法,在不改變原有業務類的基礎上增強業務類的功能,下面
建立一個簡單的示例介紹:
①新建一個測試應用(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(); } }
通過測試我們可以的到一下的結果:
通過原有業務類處理:
執行新增學生的新增....
通過代理類處理:
開啟事務....
執行新增學生的新增....
提交事務....
到這裡代理類實現了增強業務功能但是不改變原有的程式碼,希望能夠幫助到你理解代理類的用法及其功能!!