代理模式是一种结构型设计模式, 让你能够提供对象的替代品或其占位符。 代理控制着对于原对象的访问, 并允许在将请求提交给对象前后进行一些处理。
之前写的场景不给过,只好删掉了
简单来说,就是我们不能做某种事情,找个代理人帮我们去做。
1、服务接口。
代理必须遵循该接口才能伪装成服务对象。
package com.atmae.proxy;
/**
* @Author: Mae
* @Date: 2022/4/6
* @Description:
*/
public interface GoogleSubject {
/**
* gg服务器
*/
void doWork();
}
2、服务类。
提供了一些实用的业务逻辑。 比如访问gg
package com.atmae.proxy;
/**
* @Author: Mae
* @Date: 2022/4/6
* @Description:
*/
public class MySubject implements GoogleSubject{
@Override
public void doWork() {
System.out.println("Google!");
}
}
3、代理类。
代理类包含一个指向服务对象的引用成员变量。 代理完成其任务(比如 访问gg)后会将请求传递给服务对象。
package com.atmae.proxy;
/**
* @Author: Mae
* @Date: 2022/4/6
* @Description:
*/
public class HKProxy implements GoogleSubject {
private MySubject subject;
public HKProxy(MySubject subject) {
this.subject = subject;
}
@Override
public void doWork() {
subject.doWork();
}
}
4、客户端
能通过同一接口与服务或代理进行交互, 所以可在一切需要服务对象的代码中使用代理。
package com.atmae.proxy;
/**
* @Author: Mae
* @Date: 2022/4/6
* @Description:
*/
public class Client {
public static void main(String[] args) {
HKProxy proxy=new HKProxy(new MySubject());
proxy.doWork();
}
}
例如创建某个对象开销很大,可以在访问此对象时加一个代理,用代理访问此对象。