码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式--5.1 代理模式--入门

时间:2016-07-15 19:59:15      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

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

 

设计模式--5.1 代理模式--入门

标签:

原文地址:http://www.cnblogs.com/fubaizhaizhuren/p/5674263.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!