个人对于代理模式的理解
/*
* 代理模式
* 优点
* 职责清晰
* 高扩展性
* 智能化
*/
public class MyMain {
public static void main(String[] args) {
//定义一个玩家
IGamePlayer gamePlayer=new GamePlayer("老九");
//定义一个代打玩家
GamePlayerProxy gamePlayerProxy=new GamePlayerProxy(gamePlayer);
System.out.println("代打玩家开始代打-------------");
gamePlayerProxy.login();
gamePlayerProxy.killBoss();
gamePlayerProxy.upRank();
gamePlayerProxy.killBoss();
gamePlayerProxy.upRank();
System.out.println("代打玩家结束代打-------------");
}
}
//定义一个玩家接口(抽象主题角色)
interface IGamePlayer{
//登陆方法
public abstract void login();
//打怪
public abstract void killBoss();
//升级
public abstract void upRank();
}
//玩家(具体主题角色)
class GamePlayer implements IGamePlayer{
String userName=null;
public GamePlayer(String userName) {
this.userName=userName;
}
@Override
public void login() {
System.out.println("玩家"+userName+"登陆成功");
}
@Override
public void killBoss() {
System.out.println("玩家"+userName+"开始杀怪");
}
@Override
public void upRank() {
System.out.println("玩家"+userName+"升级");
}
}
//代打(理)玩家(代理主题角色)
class GamePlayerProxy implements IGamePlayer{
//代理的玩家
private IGamePlayer gamePlayer=null;
public GamePlayerProxy(IGamePlayer gamePlayer) {
this.gamePlayer=gamePlayer;
}
@Override
public void login() {
System.out.println("代打玩家开始登陆玩家账号----");
gamePlayer.login();
}
@Override
public void killBoss() {
System.out.println("代打玩家开始帮玩家代打Boss----");
gamePlayer.killBoss();
}
@Override
public void upRank() {
System.out.println("代打玩家帮玩家升级----");
gamePlayer.upRank();
}
}
普通代理
/*
* 代理模式-普通代理
*
*/
public class MyMain2 {
public static void main(String[] args) {
IGamePlayerA proxy=new GamePlayerProxyA("老八");
proxy.login();
proxy.killBoss();
proxy.upRank();
}
}
interface IGamePlayerA{
abstract public void login();
abstract public void killBoss();
abstract public void upRank();
}
class GamePlayerA implements IGamePlayerA{
private String name=null;
public GamePlayerA(IGamePlayerA gamePlayer,String name) {
if(gamePlayer==null)
System.out.println("不能创建真实角色");
else {
this.name=name;
}
}
@Override
public void login() {
System.out.println("玩家"+name+"登陆成功");
}
@Override
public void killBoss() {
System.out.println(name+"在打boss");
}
@Override
public void upRank() {
System.out.println(name+"升级了");
}
}
class GamePlayerProxyA implements IGamePlayerA{
private IGamePlayerA gamePlayer=null;
public GamePlayerProxyA(String name) {
gamePlayer=new GamePlayerA(this, name);
}
@Override
public void login() {
gamePlayer.login();
}
@Override
public void killBoss() {
gamePlayer.killBoss();
}
@Override
public void upRank() {
gamePlayer.upRank();
}
}
/*
* 代理模式-强制代理
*/
public class MyMain3 {
public static void main(String[] args) {
IGamePlayerB player=new GamePlayerB("老九");
player.login();
player.killBoss();
player.upRank();
IGamePlayerB proxy=player.getProxy();
proxy.login();
proxy.killBoss();
proxy.upRank();
}
}
interface IGamePlayerB {
abstract public void login();
abstract public void killBoss();
abstract public void upRank();
abstract public IGamePlayerB getProxy();
}
class GamePlayerB implements IGamePlayerB {
private String name = null;
private IGamePlayerB proxy = null;
public GamePlayerB(String name) {
this.name = name;
}
@Override
public void login() {
if(isProxy())
System.out.println("玩家"+name+"登陆成功");
else {
System.out.println("请使用代理访问");
}
}
@Override
public void killBoss() {
if(isProxy())
System.out.println(name + "在打boss");
else {
System.out.println("请使用代理访问");
}
}
@Override
public void upRank() {
if(isProxy())
System.out.println(name + "升级了");
else {
System.out.println("请使用代理访问");
}
}
@Override
public IGamePlayerB getProxy() {
this.proxy = new GamePlayerProxyB(this);
return proxy;
}
private boolean isProxy() {
if (this.proxy == null) {
return false;
} else {
return true;
}
}
}
class GamePlayerProxyB implements IGamePlayerB {
private IGamePlayerB gamePlayer = null;
public GamePlayerProxyB(IGamePlayerB gamePlayerB) {
gamePlayer = gamePlayerB;
}
@Override
public void login() {
gamePlayer.login();
}
@Override
public void killBoss() {
gamePlayer.killBoss();
}
@Override
public void upRank() {
gamePlayer.upRank();
}
@Override
public IGamePlayerB getProxy() {
return this;
}
}