设计23式—代理

来源:互联网 发布:win如何打开udp端口 编辑:程序博客网 时间:2024/06/15 02:23

个人对于代理模式的理解

/* * 代理模式 * 优点 * 职责清晰 * 高扩展性 * 智能化 */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;}@Overridepublic void login() {System.out.println("玩家"+userName+"登陆成功");}@Overridepublic void killBoss() {System.out.println("玩家"+userName+"开始杀怪");}@Overridepublic void upRank() {System.out.println("玩家"+userName+"升级");}}//代打(理)玩家(代理主题角色)class GamePlayerProxy implements IGamePlayer{//代理的玩家private IGamePlayer gamePlayer=null;public GamePlayerProxy(IGamePlayer gamePlayer) {this.gamePlayer=gamePlayer;}@Overridepublic void login() {System.out.println("代打玩家开始登陆玩家账号----");gamePlayer.login();}@Overridepublic void killBoss() {System.out.println("代打玩家开始帮玩家代打Boss----");gamePlayer.killBoss();}@Overridepublic 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;}}@Overridepublic void login() {System.out.println("玩家"+name+"登陆成功");}@Overridepublic void killBoss() {System.out.println(name+"在打boss");}@Overridepublic void upRank() {System.out.println(name+"升级了");}}class GamePlayerProxyA implements IGamePlayerA{private IGamePlayerA gamePlayer=null;public GamePlayerProxyA(String name) {gamePlayer=new GamePlayerA(this, name);}@Overridepublic void login() {gamePlayer.login();}@Overridepublic void killBoss() {gamePlayer.killBoss();}@Overridepublic 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;}@Overridepublic void login() {if(isProxy())System.out.println("玩家"+name+"登陆成功");else {System.out.println("请使用代理访问");}}@Overridepublic void killBoss() {if(isProxy())System.out.println(name + "在打boss");else {System.out.println("请使用代理访问");}}@Overridepublic void upRank() {if(isProxy())System.out.println(name + "升级了");else {System.out.println("请使用代理访问");}}@Overridepublic 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;}@Overridepublic void login() {gamePlayer.login();}@Overridepublic void killBoss() {gamePlayer.killBoss();}@Overridepublic void upRank() {gamePlayer.upRank();}@Overridepublic IGamePlayerB getProxy() {return this;}}


原创粉丝点击