• 设计模式--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();
        }
    }
  • 相关阅读:
    js点击重置按钮重置表单
    Flash文件在asp页面无法播放,网页上面的Flash文件在火狐浏览器不播放
    更新域名解析以后,IP在cmd中ping不正确,清理DNS缓存
    简单PHP会话(session)说明
    delphi 事件和属性的绑定
    读书笔记(乡土中国)
    读书笔记(支付战争)
    读书笔记(从0到1)
    读书笔记(创业维艰)
    读书笔记(三体)
  • 原文地址:https://www.cnblogs.com/fubaizhaizhuren/p/5674263.html
Copyright © 2020-2023  润新知