JAVA静态代理

Java静态代理

1 概念

代理的意思,顾名思义就是让别人去帮忙做一些事情,在现实生活中也是处处都存在的代理。比如租房找的中介,买东西找的代购等等。在java的世界,代理也是同样的意思,一个类的方法执行后只用一个功能,那么我想去让功能更强大,或者增加其他功能的时候,这时候考虑到单一原则,而且尽量不去修改原代码,我们就会使用代理类。

代理类就是在帮助我们实现原有的方法的时候,可以用额外的扩增其他的功能。

在这里插入图片描述

什么是静态代理:

静态代理就是指我们在给一个类扩展功能的时候,我们需要去书写一个静态的类,相当于在之前的类上套了一层,这样我们就可以在不改变之前的类的前提下去对原有功能进行扩展。

静态代理的缺点:

因为静态代理是需要我们书写一个代理类,对原有的类的功能进行增强,但是一个类比较好些,如果在工作中有大量的类需要我们去代理,那么使用静态代理的方式,就会让我们的代码量大大增加。

2 java中的静态代理

2.1 前期准备(entity)

结婚方法的接口

public interface Marry {
    /**
     * 结婚方法
     */
    void marry();
}

人类接口

public interface Person extends Marry{
    /**
     * 说话方法
     */
    void talk();
}

男人类

public class Man implements Person{
    /**
     * 姓名
     */
    private String name;
    
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 重写结婚方法
     */
    @Override
    public void marry() {
        System.out.println(name+"在结婚");
    }

    /**
     * 重写说话方法
     */
    @Override
    public void talk() {
        System.out.println(name+"在说话");
    }
}

2.2 代理类

针对结婚写的静态代理类

/**
 * @author 晓龙
 * @version 1.8.271
 * @ProtectName ProxyDemo
 * @ClassName MarryProxy
 * @Description 结婚代理
 * @createTime 2021年05月23日 12:44:00
 */
public class MarryProxy implements Marry {
    // 代理对象
    private Person person;

    public void setPerson(Person person) {
        this.person = person;
    }

    // 代理结婚
    @Override
    public void marry() {
        // 结婚前准备
        beforeMarry();
        // 结婚
        person.marry();
        // 结婚后
        afterMarry();

    }
    private void beforeMarry(){
        System.out.println("结婚前准备");
    }
    private void afterMarry(){
        System.out.println("结婚后准备");
    }
}

2.3 测试类

/**
 * @author 晓龙
 * @version 1.8.271
 * @ProtectName ProxyDemo
 * @ClassName Test
 * @Description 测试类
 * @createTime 2021年05月23日 12:42:00
 */
public class Test {
    public static void main(String[] args) {
        // 实例一个正常的man
        Man man = new Man();
        man.setName("peter");
        // man结婚
        man.marry();
        System.out.println("=========分割线============");
        // 实例代理类--->中介公司
        MarryProxy marryProxy = new MarryProxy();
        // 设置代理对象
        marryProxy.setPerson(man);
        // 结婚代理
        marryProxy.marry();
    }
}

结果

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java静态代理是一种设计模式,它允许我们通过创建一个代理来控制对目标对象的访问。代理和目标实现相同的接口,代理中持有目标对象的引用,并在调用目标对象的方法之前或之后执行一些额外的操作。 下面是一个简单的Java静态代理的例子: ```java // 定义一个接口 interface Image { void display(); } // 目标 class RealImage implements Image { private String filename; public RealImage(String filename) { this.filename = filename; loadFromDisk(); } private void loadFromDisk() { System.out.println("Loading image: " + filename); } public void display() { System.out.println("Displaying image: " + filename); } } // 代理 class ImageProxy implements Image { private RealImage realImage; private String filename; public ImageProxy(String filename) { this.filename = filename; } public void display() { if (realImage == null) { realImage = new RealImage(filename); } realImage.display(); } } // 使用代理 public class Main { public static void main(String[] args) { Image image = new ImageProxy("image.jpg"); image.display(); } } ``` 在上面的例子中,`RealImage`是目标,它实现了`Image`接口。`ImageProxy`是代理,它也实现了`Image`接口,并在`display`方法中调用了目标对象的`display`方法。在`ImageProxy`中,如果目标对象还没有被创建,它会在第一次调用`display`方法时创建一个目标对象。 这样,通过静态代理,我们可以在不修改目标的情况下,对目标的方法进行扩展或增强,例如在代理中添加日志记录、权限控制等功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值