打字猴:1.700460225e+09
1700460225 设计模式之禅 [:1700453965]
1700460226 设计模式之禅 12.4 代理模式的扩展
1700460227
1700460228 12.4.1 普通代理
1700460229
1700460230 在网络上代理服务器设置分为透明代理和普通代理,是什么意思呢?透明代理就是用户不用设置代理服务器地址,就可以直接访问,也就是说代理服务器对用户来说是透明的,不用知道它存在的;普通代理则是需要用户自己设置代理服务器的IP地址,用户必须知道代理的存在。我们设计模式中的普通代理和强制代理也是类似的一种结构,普通代理就是我们要知道代理的存在,也就是类似的GamePlayerProxy这个类的存在,然后才能访问;强制代理则是调用者直接调用真实角色,而不用关心代理是否存在,其代理的产生是由真实角色决定的,这样的解释还是比较复杂,我们还是用实例来讲解。
1700460231
1700460232 首先说普通代理,它的要求就是客户端只能访问代理角色,而不能访问真实角色,这是比较简单的。我们以上面的例子作为扩展,我自己作为一个游戏玩家,我肯定自己不练级了,也就是场景类不能再直接new一个GamePlayer对象了,它必须由GampePlayerProxy来进行模拟场景,类图修改如图12-4所示。
1700460233
1700460234
1700460235
1700460236
1700460237 图12-4 普通代理类图
1700460238
1700460239 改动很小,仅仅修改了两个实现类的构造函数,GamePlayer的构造函数增加了_gamePlayer参数,而代理角色则只要传入代理者名字即可,而不需要说是替哪个对象做代理。GamePlayer类如代码清单12-10所示。
1700460240
1700460241 代码清单12-10 普通代理的游戏者
1700460242
1700460243 public class GamePlayer implements IGamePlayer{
1700460244
1700460245 private String name=””;
1700460246
1700460247 //构造函数限制谁能创建对象,并同时传递姓名
1700460248
1700460249 public GamePlayer(IGamePlayer_gamePlayer,String_name)throws Exception{
1700460250
1700460251 if(_gamePlayer==null){
1700460252
1700460253 throw new Exception(“不能创建真实角色!”);
1700460254
1700460255 }else{
1700460256
1700460257 this.name=_name;
1700460258
1700460259 }
1700460260
1700460261 }
1700460262
1700460263 //打怪,最期望的就是杀老怪
1700460264
1700460265 public void killBoss(){
1700460266
1700460267 System.out.println(this.name+“在打怪!”);
1700460268
1700460269 }
1700460270
1700460271 //进游戏之前你肯定要登录吧,这是一个必要条件
1700460272
1700460273 public void login(String user,String password){
1700460274
[ 上一页 ]  [ :1.700460225e+09 ]  [ 下一页 ]