设计模式 —— Proxy 代理模式

Proxy模式是一种结构型设计模式,旨在降低程序间的耦合。它分为静态代理和动态代理。静态代理在编译期创建,适用于单一接口,但若需服务于多个接口则需创建多个代理类。动态代理则在运行时通过反射机制生成,JDK动态代理要求目标类实现接口,而CGlib代理则基于继承。动态代理主要利用Proxy类和InvocationHandler接口,允许在运行时添加额外逻辑。
摘要由CSDN通过智能技术生成

简介

  • Proxy代理模式是一种结构型设计模式。通过代理模式可以实现程序之间的解耦,可以解决在直接访问对象时带来的程序之间耦合度增大的问题。
  • 按照代理的创建时期,代理类分为两种:
    • 静态代理:在编译期,手动创建代理类,而不是由编译器生成代理类。
    • 动态代理:在运行期,运用反射机制动态而生成代理类。
      • JDK代理基于接口接口
      • CGlib代理基于继承

静态代理

  • 优点
    • 静态代理可以将目标类和目标方法封装起来,有隐蔽的作用。
  • 缺点
    • 静态代理类只能为特定的接口服务。
    • 如想要为多个接口服务则需要建立很多个代理类。

目录结构

  • cn.water
    • main
      • java
        • IProducer.java(接口)
        • Producer.java(实现类)
        • ProxyProducer.java(代理类)
    • test
      • staticTest.java(测试类)

接口

IProducer.java
package cn.water.StaticProxy;

public interface IProducer {
   

    /** 销售 */
    void saleProduct(float money);

    /** 售后 */
    void afterService(float money);

}

实现类

Producer.java
package cn.water.StaticProxy;

public class Producer implements IProducer {
   

    /** 销售 */
    public void saleProduct(float money) {
   
        System.out.println("生产者:通过[销售],获得了"+money+"元");
    }

    /** 售后 */
    public void afterService(float money) {
   
        System.out.println("生产者:通过[售后],获得了"+money+"元");
    }
}

代理类

ProxyProducer.java
package cn.water.StaticProxy;

public class ProxyProducer implements IProducer {
   

    private Producer producer = new Producer();

    /** 销售 */
    public void saleProduct(float money) {
   
        System.out.println("消费者:消费了"+money+"元");
        producer.saleProduct(money * 0.2f);
    }

    /** 售后 */
    public void afterService(float money) {
   
        System.out.println("消费者:消费了"+money+"元");
        producer.afterService(2
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值