Appearance
代理模式
定义
代理模式(Proxy Pattern)是一种设计模式,它为其他对象提供了一种代理以控制对这个对象的访问。代理对象在客户端和目标对象之间起到中介的作用,可以增加额外的功能,如访问控制、缓存、日志记录等。
代理模式的主要目的是在不改变目标对象的情况下,通过代理对象来扩展目标对象的功能。代理模式可以用于实现延迟加载、缓存、权限控制、远程调用等场景。
代理模式的结构
代理模式通常包含以下角色:
- Subject(抽象主题):定义了代理对象和真实对象共同的接口,以便代理对象可以代替真实对象进行操作。
- RealSubject(真实主题):实现了抽象主题定义的接口,是代理对象所代表的真实对象。
- Proxy(代理对象):实现了抽象主题定义的接口,并在其内部维护一个对真实对象的引用,通过代理对象来控制对真实对象的访问。
- Client(客户端):通过代理对象来访问真实对象。
代码示例
java
public interface Game {
void login(String username, String password);
void play();
}
java
public class XiangGame implements Game {
private final String name;
public XiangGame() {
this.name = "想不想修真";
}
@Override
public void login(String username, String password) {
// 登录游戏
System.out.printf("你登录了游戏: %s\n", this.name);
}
@Override
public void play() {
System.out.println("玩游戏想不想修真");
}
public String getName() {
return name;
}
}
java
public class ProxyGame implements Game{
private final XiangGame game;
public ProxyGame() {
game = new XiangGame();
}
@Override
public void login(String username, String password) {
game.login(username,password);
System.out.printf("记录一波日志:用户名:%s, 登录了游戏: %s\n", username, game.getName());
}
@Override
public void play() {
game.play();
System.out.printf("记录一波日志:你在玩游戏: %s\n", game.getName());
}
}
java
public class Client {
public static void main(String[] args) {
Game game = new ProxyGame();
game.login("张三", "zhangSan");
game.play();
}
}