Java静态代理是指由程序员创建或使用工具自动生成代理类,在编译时就已经确定将要代理的对象和方法,并且在编译期间就已经确定好了代理类的代码。在运行时,代理类和被代理类是固定的。

Java静态代理是指由程序员创建或使用工具自动生成代理类,在编译时就已经确定将要代理的对象和方法,并且在编译期间就已经确定好了代理类的代码。在运行时,代理类和被代理类是固定的。_第1张图片 

1、ISale.java

package com.atguigu;

public interface ISale {
    void saleShaoBing();
    void saleJianBing();
    void saleYueBing();
    void saleManTou();
}

2、WuDa.java

package com.atguigu;

//Target:目标类、目标对象
public class WuDa implements ISale{

    //target method:目标方法
    @Override
    public void saleShaoBing() {
        System.out.println("卖烧饼...");
    }

    @Override
    public void saleJianBing() {
        System.out.println("卖煎饼...");
    }

    @Override
    public void saleYueBing() {
        System.out.println("卖月饼...");
    }

    @Override
    public void saleManTou() {
        System.out.println("卖馒头...");
    }
}

3、WuDaProxy.java

package com.atguigu;

/**
 * 静态代理代码比较容易理解,但是代码的冗余量太大了,而且不够灵活
 * 一旦业务场景发生变化,那么需要去修改每一个方法内部细节
 */
public class WuDaProxy implements ISale{

    private WuDa target;

    public WuDaProxy(WuDa target) {
        this.target = target;
    }

    //proxy method:代理方法=目标方法+增强
    @Override
    public void saleShaoBing() {
        target.saleShaoBing();
        song();   //后置增强
    }

    @Override
    public void saleJianBing() {
        song();   //前置增强
        target.saleJianBing();
    }

    @Override
    public void saleYueBing() {
        try {
            target.saleYueBing();
        } catch (Exception e) {
            song();     //抛异常时增强
        }
    }

    @Override
    public void saleManTou() {
        target.saleManTou();
    }

    //送大麦茶、额外操作、增强操作、Advice
    private void song() {
        System.out.println("送大麦茶...");
    }
}

4、ProxyTest.java

package com.atguigu;

import org.junit.jupiter.api.Test;

public class ProxyTest {

    @Test
    public void test01() {
        //调用目标对象中的目标方法
        WuDa wuDa = new WuDa();
        wuDa.saleJianBing();
        //卖煎饼...
    }

    @Test
    public void test02() {
        WuDa target = new WuDa();
        WuDaProxy proxy = new WuDaProxy(target);
        //调用代理对象中的代理方法
        proxy.saleJianBing();
        //送大麦茶...
        //卖煎饼...
    }

}

Java静态代理是指在编译期间就已经确定的代理方式,它需要手动编写代理类,并在代码中调用代理类。在静态代理中,代理类和被代理类实现了同样的接口,代理类与被代理类之间的关系在编译期间就已经确定。其基本思想是在不改变原有类的前提下,通过代理类来进行扩展和增强,实现了对原有类的控制。常见的静态代理包括:装饰器模式、适配器模式、代理模式等。

Java静态代理是一种代理模式,在这种模式下,代理对象和被代理对象实现相同的接口,并在代理对象中通过调用被代理对象的方法来实现相应的功能,同时在代理对象的方法中可以添加额外的逻辑。

静态代理中代理对象和被代理对象在编译期就已经确定,因此也称为编译时代理。静态代理相对于动态代理来说,实现简单,但是不够灵活,并且需要为每个被代理对象编写一个代理类。

Java静态代理是一种设计模式,它允许我们创建代理对象,该对象可以代表原始对象(或其他对象),并在其上添加一些额外的功能。在静态代理中,代理类在编译时就已经确定,并且代理类和原始类都要实现相同的接口。在代理类中,我们可以在原始方法调用前后添加一些其他的操作,比如日志记录、权限控制、缓存等。静态代理通常用于解决一些横切关注点(cross-cutting concern),比如日志记录、事务管理等。

Java静态代理是指由程序员创建或使用工具自动生成代理类,在编译时就已经确定将要代理的对象和方法,并且在编译期间就已经确定好了代理类的代码。在运行时,代理类和被代理类是固定的。由代理类对被代理类的方法进行包装,实现对被代理类方法的增强或控制访问权限等操作。这种代理方式的优点是代码结构清晰,可读性好,缺点是需要手动创建代理类。

你可能感兴趣的:(Java设计模式,java,开发语言)