设计模式之代理模式(十二)

代理模式是一种设计模式,它允许我们使用代理对象作为另一个对象的接口,以控制对该对象的访问。代理对象可以充当其他对象的代表,通过它们可以控制对那些对象的访问。

Java中实现代理模式,主要有两种方式可以选择,一种是使用静态代理,一种是使用动态代理。静态代理需要手动编写代理类,而动态代理不需手动编写代理类。

下面以使用Java实现静态代理为例,来介绍代理模式的使用场景和作用。

假设我们有一个UserService接口,提供了获取用户信息和修改用户信息的功能。我们需要在不修改原有UserService接口的基础上,增加一个对用户信息进行记录的功能,这时就可以使用代理模式。

首先,我们定义UserService接口:

public interface UserService {
    void getUserInfo();
    void updateUserInfo();
}

接着,我们定义UserService实现类:

public class UserServiceImpl implements UserService {
    public void getUserInfo() {
        System.out.println("获取用户信息");
    }
    public void updateUserInfo() {
        System.out.println("修改用户信息");
    }
}

然后,我们定义一个代理类UserProxy实现UserService接口,并包含一个UserService对象作为属性,用来执行UserService对象的功能。UserProxy代理类可以在UserService对象的功能调用前或调用后,添加一些额外的功能,比如对用户的操作进行记录。

public class UserProxy implements UserService {
    private UserService userService;

    public UserProxy(UserService userService) {
        this.userService = userService;
    }

    public void getUserInfo() {
        System.out.println("获取用户信息之前,记录用户操作");
        userService.getUserInfo();
        System.out.println("获取用户信息之后,记录用户操作");
    }

    public void updateUserInfo() {
        System.out.println("修改用户信息之前,记录用户操作");
        userService.updateUserInfo();
        System.out.println("修改用户信息之后,记录用户操作");
    }
}

最后,我们可以通过以下代码创建一个UserService对象和其代理对象,并调用代理对象的方法。

public static void main(String[] args) {
    UserService userService = new UserServiceImpl();
    UserService userProxy = new UserProxy(userService);

    userProxy.getUserInfo();
    userProxy.updateUserInfo();
}

代理模式的作用是可以在不改变原有接口的情况下,增加一些额外的功能。在上述例子中,代理类UserProxy就是对UserService接口的增强,可以在调用getUserInfo和updateUserInfo方法前后增加记录用户操作的功能。代理模式还可以实现远程代理、虚拟代理、安全代理等功能,非常灵活,是一种常用的设计模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值