以下是一个简单的示例代码,演示了如何使用Java代理模式来实现灵活的HTTP请求处理。

类A:

public class A {
    public static void main(String[] args) {
        Proxy proxy = new Proxy();
        String result = proxy.getData('B', 'http://example.com');
        System.out.println(result);
    }
}

代理类Proxy:

public class Proxy {
    private B b = new B();
    private C c = new C();
    
    public String getData(String type, String url) {
        if ('B'.equals(type)) {
            return b.getData(url);
        } else if ('C'.equals(type)) {
            return c.getData(url);
        } else {
            throw new IllegalArgumentException("Invalid type: " + type);
        }
    }
}

类B:

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

public class B {
    public String getData(String url) {
        try {
            HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
            conn.setRequestMethod("GET");
            conn.connect();
            InputStream in = conn.getInputStream();
            Scanner scanner = new Scanner(in);
            String result = scanner.useDelimiter("\A").next();
            scanner.close();
            in.close();
            return result;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}

类C:

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

public class C {
    public String getData(String url) {
        try {
            HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
            conn.setRequestMethod("GET");
            conn.setRequestProperty("User-Agent", "Mozilla/5.0");
            conn.connect();
            InputStream in = conn.getInputStream();
            Scanner scanner = new Scanner(in);
            String result = scanner.useDelimiter("\A").next();
            scanner.close();
            in.close();
            return result;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}

在这个示例中,类B和类C都实现了获取http请求数据的方法,但是它们的请求头不同。代理类Proxy根据参数type的不同选择调用哪个类的方法,并将获取到的数据返回给类A。


原文地址: https://www.cveoy.top/t/topic/oCkp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录