代理设计模式是一种结构型设计模式,它允许通过创建代理对象来间接访问另一个对象,从而实现对原始对象的安全保护、
延迟加载、额外处理等功能。代理对象和原始对象都实现了相同的接口,因此客户端可以以相同的方式使用它们。代理对象扮
演着中间人的角色,控制客户端对原始对象的访问。代理模式一般分为静态代理和动态代理两种。静态代理是在编译时就已经确定。
传统设计模式讲解时使用的示例代码,大都采用与读者日常生活接解的业务系统没有多大关联关系。以致大部分读者无法做到学以致用,学完就忘记。本文采用使用日常生活中随处可见的商品业务来编写实现代码:
在电商平台业务中,代理模式可以被用于实现商品的代理销售。例如,某个商家希望通过电商平台代理销售自己的商品,但又不希望将商品的实现细节暴露。这时,商家可以提供一个实现了商品接口的商品类,并将该商品类传递给电商平台的代理类。电商平台的代理类可以在调用商品类的方法前后,进行一些额外的处理,例如记录日志、统计销售数据等。通过代理模式,商家的商品可以安全地被代理销售,同时电商平台也可以控制对商品实现细节的访问。 代理模式三部分组成,他们分别是Subject、RealSubject、Proxy。
Subject是抽象主题类,它定义了代理对象和原始对象的共同接口。
RealSubject是真实主题类,它实现了Subject接口,并定义了真正的业务逻辑。
Proxy是代理类,它也实现了Subject接口,并在内部维护了一个RealSubject对象,通过调用RealSubject的方法来实现对原始对象的访问。
Client是客户端类,它使用代理对象来访问原始对象。
下面是代理模式的Java参考实践:
// 定义商品接口
public interface Product {
void sell();
}
// 实现商品类
public class ProductImpl implements Product {
private String name;
public ProductImpl(String name) {
this.name = name;
}
@Override
public void sell() {
System.out.println("销售商品:" + name);
}
}
// 定义商品代理类
public class ProductProxy implements Product {
private Product product;
public ProductProxy(Product product) {
this.product = product;
}
@Override
public void sell() {
// 调用代理对象的额外方法
beforeSell();
// 调用被代理对象的方法
product.sell();
// 调用被代理对象的方法
afterSell();
}
private void beforeSell() {
System.out.println("准备销售商品");
}
private void afterSell() {
System.out.println("完成销售商品");
}
}
// 客户端调用
public class Client {
public static void main(String[] args) {
Product product = new ProductImpl("电视机");
Product proxy = new ProductProxy(product);
proxy.sell();
}
}
在上述代码中,Product是商品接口,ProductImpl是真实主题类,实现了Product接口,并定义了真正的业务逻辑。ProductProxy是商品代理类,也实现了Product接口,在内部维护了一个ProductImpl对象,并在调用ProductImpl的方法前后,进行了一些额外的处理。Client是客户端类,在创建代理对象时,传入了一个ProductImpl对象,并调用了代理对象的方法。
总的来说,代理模式是一种常用的设计模式,可以应用于不同的场景,如安全保护、性能优化、实现懒加载等。但是在使用代理模式时需要权衡其优缺点,并根据具体的需求进行选择。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有