Agensi merujuk kepada: Dalam sesetengah senario, subjek akan mencari ejen untuk membantunya menyelesaikan beberapa tugas, seperti ejen selebriti, pembeli rumah yang mencari ejen hartanah, dsb.
Proksi terutamanya melakukan beberapa operasi tambahan tambahan pada gelagat objek.
Cara mencipta objek proksi:
Kelas perwakilan proksi dalam Java ialah: Java.lang.reflect.Proxy
Proksi menyediakan kaedah statik untuk menjana objek untuk Objek proksi mengembalikan
Kelas utama:
public class Test { public static void main(String[] args) { //1、创建一个类,对象类必须实现接口 star s=new star("小明"); //为小明这个明星对象生成一个代理对象(经纪人) skill s2=StarAgentProxy.getProxy(s); s2.sing();//走代理的 s2.jump(); //运行结果: //代理开始 //小明开始唱歌 //代理结束 //代理开始 //小明开始跳舞 //代理结束 } }
Kelas bintang (kelas objek):
//明星类 public class star implements skill{ private String name; public star(String name) { this.name = name; } //重写方法 public void jump(){ System.out.println(name+"开始跳舞"); } public void sing(){ System.out.println(name+"开始唱歌"); } }
Kelas antara muka tingkah laku:
rreeeKelas proksi:
//行为类 public interface skill { void jump();//跳舞 void sing();//唱歌 }
Langkah pelaksanaan:
1 Antara muka mesti wujud
2. Objek proksi perlu melaksanakan antara muka
3 Kelas proksi untuk mendapatkan objek Objek proksi
memanggil kaedah melalui objek proksi Apakah proses pelaksanaannya?
1. Pergi ke ejen dahulu
2. Ejen boleh melakukan beberapa kerja tambahan untuk kaedah
3 objek
4. Kembali kepada proksi, proksi bertanggungjawab untuk mengembalikan keputusan kepada pemanggil kaedah
Langkah utama untuk mengoptimumkan kod:
1 mestilah antara muka, dan kelas pelaksanaan mesti melaksanakan antara muka (proksi biasanya Berdasarkan pelaksanaan antara muka)
2. Cipta objek kelas pelaksanaan, yang merupakan objek perniagaan, dan kemudian buat proksi objek untuk objek perniagaan
Kelebihan proksi dinamik:
1 Fungsi kaedah boleh dipertingkatkan tanpa mengubah kod sumber kaedah, dan penggunaan semula kod boleh dipertingkatkan.
2. Kerja pengaturcaraan dipermudahkan, kecekapan pembangunan dipertingkatkan, dan sistem perisian dipertingkatkan pada masa yang sama
3 objek proksi
4 Ia sangat fleksibel dan menyokong mana-mana objek kelas pelaksanaan dari mana-mana jenis antara muka sebagai proksi, atau ia boleh secara langsung memproksi antara muka itu sendiri
Rangka kerja untuk proksi objek kelas pelaksanaan apa-apa jenis antara muka (generik berjalan)
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; //代理类 public class StarAgentProxy { //定义一个方法来返回一个明星对象的代理对象 public static skill getProxy(star obj){ //为小明这个对象生成一个代理对象 /* public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, 对象实现的接口列表 InvocationHandler h) */ return (skill) Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("代理开始"); //真正的让小明去唱歌、跳舞 //method==>正在调用的方法对象, args==>代表这个方法的参数 Object rs=method.invoke(obj,args); System.out.println("代理结束"); return rs; } }); } }
Atas ialah kandungan terperinci Apakah prinsip dan kaedah pelaksanaan proksi dinamik Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!