Java代码学习三大代理模式 - 动态代理

在Java中,代理模式是一种常用的设计模式,它允许一个对象(代理对象)控制对另一个对象(目标对象)的访问。代理模式主要分为三种:静态代理、动态代理和CGLIB代理(基于类的代理)。这里,我们将重点讨论动态代理。

动态代理是在运行时动态地创建代理类及其对象,而不需要预先定义代理类。在Java中,动态代理主要基于Java的反射机制,并且需要实现InvocationHandler接口。

package com.proxy;

/**
 * description 动态代理测试类
 *
 */
public class DynamicProxyTest {
    public static void main(String[] args) {
        ClothesFactory clothesFactory = new ClothesFactory();
        ShoesFactory shootFactory = new ShoesFactory();
        PurchasingCompany company = new PurchasingCompany();

        company.setFactory(shootFactory);
        Shoes employee1 = (Shoes) company.getProxyInstance();
        employee1.shoes("42");

        company.setFactory(clothesFactory);
        Clothes employee2 = (Clothes) company.getProxyInstance();
        employee2.clothes(180);
    }
}

package com.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;


/**
 * description 代购公司(动态代理对象)
 *
 */
public class PurchasingCompany implements InvocationHandler {
    /**
     * 目标对象
     **/
    private Object factory ;

    public Object getFactory() {
        return factory;
    }

    public void setFactory(Object factory) {
        this.factory = factory;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        frontService();
        /**
         * 这里用了反射的思想,因为我们不知道调用的是那个工厂的那个方法
         **/
        Object retObject = method.invoke(factory, args);
        endService();
        return null;
    }

    public void frontService() {
        System.out.println("根据您的需求进行市场调研");
    }

    public void endService() {
        System.out.println("为您提供一条龙的包办服务");
    }

    /**
     * 调度员工
     *
     * 1 新建一名员工
     * 2.告诉员工工厂地址
     * this:绑定
     */
    public Object getProxyInstance() {
        return Proxy.newProxyInstance(factory.getClass().getClassLoader(), factory.getClass().getInterfaces(), this);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值