设计模式--5.1 代理模式--入门
1.代理模式
(1) 为其它对象提供一种代理,以控制对这个对象的访问.
(2) 代理模式也叫委托模式,其它模式,如状态模式、策略模式、访问者模式,本质上是在更特殊的场合使用了代理模式。
2.代理模式通用类图
(1)Subject 抽象主题角色,可以是抽象类,也可以是接口,是一个普通的业务类型定义 (IGamePlayer)
(2)RealSubject 也叫被委托角色、被代理角色,它才是冤大头,是业务逻辑的具体执行者。(GamePlayer,具体执行业务)
(3)Proxy 也叫委托类、代理类,它负责对真实角色的应用,把所有Suject定义的方法限制,委托给真实角色(GamePlayer)实现,并在真
实角色处理前和处理后,做预处理和善后功能
3.优点
(1)职责清晰
(2)高扩展性
(3)智能化
4.使用场景
(1) 权限校验
(2)打印日志
(3)事务管理
5.第一阶段
(1)例子类图
(2) 接口类 Subjects
package com.design.代理模式.第一阶段; public interface IGamePlayer { void login(String username , String pwd); void killBoss(); void upgrade(); }
(3)真实角色 RealSubjects
package com.design.代理模式.第一阶段; public class GamePlayer implements IGamePlayer { private String name; public GamePlayer() { super(); } public GamePlayer(String _name) { super(); this.name = _name; } // 登录 @Override public void login(String username, String pwd) { System.out.println("GamePlayer:"+ name +" login....."); } // 杀怪 @Override public void killBoss() { System.out.println("GamePlayer:"+ name +" killBoss....."); } // 升级 @Override public void upgrade() { System.out.println("GamePlayer: "+ name +" upgrade....."); } }
(4)代理类 Proxy
package com.design.代理模式.第一阶段; public class GamePlayerProxy implements IGamePlayer { private IGamePlayer gamePlayer = null; public GamePlayerProxy() { super(); } // 通过构造函数决定要对谁进行代练 public GamePlayerProxy(IGamePlayer _gamePlayer) { super(); this.gamePlayer = _gamePlayer; } // 代练登录 @Override public void login(String username, String pwd) { this.gamePlayer.login(username, pwd); } // 代练杀怪 @Override public void killBoss() { this.gamePlayer.killBoss(); } // 代练升级 @Override public void upgrade() { this.gamePlayer.upgrade(); } }
(5)场景类
package com.design.代理模式.第一阶段; public class Client { public static void main(String[] args) { IGamePlayer gp = new GamePlayer("lvyafei"); IGamePlayer proxy = new GamePlayerProxy(gp); proxy.login("lvyf", "123456"); proxy.killBoss(); proxy.upgrade(); } }