设计模式(五)—— 代理模式
一、定义:
为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
二、特点:
- 真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
- 代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。
- 高扩展性
三、情景:
玩游戏时,有些玩家需要上班,但又想尽快升级,于是就在淘宝上找游戏代理,来帮他升级,根据该情景来设计类。
1、游戏接口类(Game)
public interface Game {
void login(Player play);
void play();
}
2、游戏实现类(GameImpl)
public class GameImpl implements Game{
Player player;
public void login(Player play) {
this.player = play;
System.out.println("欢迎【"+play.getUserName()+"】来到游戏世界");
}
public void play() {
int level = player.getLevel()+1;
System.out.println("恭喜升到【"+level+"】级");
}
}
3、玩家类(Player)
private String userName;
private String passWord;
private Integer level;
public Player(){
}
public Player(String userName, String passWord) {
this.userName = userName;
this.passWord = passWord;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public Integer getLevel() {
return level;
}
public void setLevel(Integer level) {
this.level = level;
}
4、代理类(Proxy)
public class Proxy implements Game{
Game game = new GameImpl();
public void startProxy(Player player){
this.login(player);
this.play();
}
public void login(Player player) {
game.login(player);
}
public void play() {
game.play();
}
}
5、代理模拟玩家登录测试类
public class ProxyGame {
public static void main(String[] args) {
Player player = new Player("fonxian","123456");
player.setLevel(0);
Proxy proxy = new Proxy();
proxy.startProxy(player);
/**
* 输出结果
* 欢迎【fonxian】来到游戏世界
恭喜升到【1】级
*/
}
}
关于作者
后端程序员,五年开发经验,从事互联网金融方向。技术公众号「清泉白石」。如果您在阅读文章时有什么疑问或者发现文章的错误,欢迎在公众号里给我留言。