设计模式--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();
}    
View Code

(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.....");

    }

}
View Code

(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();
    }

}
View Code

(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();
    }
}

 

posted @ 2016-07-15 17:15  浮白斋主人  阅读(138)  评论(0编辑  收藏  举报