Home  >  Article  >  Java  >  A commonly used proxy design pattern in Java—example summary

A commonly used proxy design pattern in Java—example summary

php是最好的语言
php是最好的语言Original
2018-07-24 17:16:131902browse

Introduction: The proxy mode provides a proxy object for a certain object, and the proxy object controls the reference and access to the original object. You can handle situations such as before access to the object, after access, exceptions, etc. It can be understood as a means of class enhancement (inheritance, decoration, proxy).

、Function

  • ##Intermediary isolation function:In some cases, a client class does not want or cannot directly reference a delegate object, and the proxy class object can play an intermediary role between the client class and the delegate object. Its characteristics It is the proxy class and the delegate class that implement the same interface.

  • ##Opening and closing principle, added functions: Agent In addition to being an intermediary between the client class and the delegate class, we can also extend the functions of the delegate class by adding additional functions to the agent class. In this way, we only need to modify the agent class without modifying the delegate class, which is consistent with the code design. The opening and closing principle. The proxy class is mainly responsible for preprocessing messages for the delegate class, filtering messages, forwarding messages to the delegate class, and processing the returned results afterwards. The proxy class itself does not actually implement the service, but provides specific services by calling the relevant methods of the delegate class. The real business functions are still implemented by delegate classes, but some public services can be added before and after the execution of the business functions. For example, if we want to add caching and logging functions to the project, we can use the proxy class to complete it without opening the encapsulated delegate class.

2. Proxy mode classification

  • Static proxy

    Yes Source code is created by a program or automatically generated by a specific tool, and then compiled. Before the program is run, the proxy class .class file has been created.

  • Dynamic proxy

    is dynamically created through the reflection mechanism when the program is running.

3. Code implementation

Static proxy

// 第一步,创建服务类接口

public interface BuyHouse {
    void buyHosue();
}


/**
 * 第二步,实现服务接口
 */
public class BuyHouseImpl implements BuyHouse {

    @Override
    public void buyHosue() {
        System.out.println("我要买房");
    }
}


/**
 * 第三步,创建代理类
 */
public class BuyHouseProxy implements BuyHouse {

    private BuyHouse buyHouse;

    public BuyHouseProxy(final BuyHouse buyHouse) {
        this.buyHouse = buyHouse;
    }

    @Override
    public void buyHosue() {
        System.out.println("买房前准备");
        buyHouse.buyHosue();
        System.out.println("买房后装修");
    }
}

/**
 * 第四步,编写实现类
 */
public class ProxyTest {
    public static void main(String[] args) {
        BuyHouse buyHouse = new BuyHouseImpl();
        buyHouse.buyHosue();
        BuyHouseProxy buyHouseProxy = new BuyHouseProxy(buyHouse);
        buyHouseProxy.buyHosue();
    }
}
Dynamic Proxy

In dynamic proxy we no longer need to manually create proxy classes, we only need to write a dynamic processor. The real proxy object is dynamically created for us by the JDK at runtime.

/**
 * 第一步:编写动态处理器
 */
public class DynamicProxyHandler implements InvocationHandler {

    private Object object;

    public DynamicProxyHandler(final Object object) {
        this.object = object;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("买房前准备");
        Object result = method.invoke(proxy, args);
        System.out.println("买房后装修");
        return result;
    }
}

/**
 * 第二步:编写测试类
 */
public class DynamicProxyTest {
    public static void main(String[] args) {
        BuyHouse buyHouse = new BuyHouseImpl();
        BuyHouse proxyBuyHouse = (BuyHouse) Proxy.newProxyInstance(BuyHouse.class.getClassLoader(), new
                Class[]{BuyHouse.class}, new DynamicProxyHandler(buyHouse));
        proxyBuyHouse.buyHosue();
    }
}

Related recommendations:

Detailed explanation of common Java design patterns - Factory pattern

Introduction to the proxy pattern (Proxy pattern) of Java design patterns

Video Tutorial: Design Patterns

The above is the detailed content of A commonly used proxy design pattern in Java—example summary. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn