Rumah > Java > javaTutorial > teks badan

Apakah prinsip dan kaedah pelaksanaan proksi dinamik Java

王林
Lepaskan: 2023-05-20 17:52:06
ke hadapan
1009 orang telah melayarinya

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();
        
        //运行结果:
        //代理开始
        //小明开始唱歌
        //代理结束
        //代理开始
        //小明开始跳舞
        //代理结束
    }
}
Salin selepas log masuk

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+"开始唱歌");
    }
}
Salin selepas log masuk

Kelas antara muka tingkah laku:

rreee

Kelas proksi:

//行为类
public interface skill {
    void jump();//跳舞
    void sing();//唱歌
}
Salin selepas log masuk

Langkah pelaksanaan:

1 Antara muka mesti wujud

2. Objek proksi perlu melaksanakan antara muka

3 Kelas proksi untuk mendapatkan objek Objek proksi

Apakah prinsip dan kaedah pelaksanaan proksi dinamik Java

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;
                    }
                });
    }
}
Salin selepas log masuk

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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan