• 设计模式--5.2 代理模式--普通代理


    1. 普通代理就是我们要知道代理类(Subject)的存在,然后才能访问

    (1)调用者只知道代理存在就可以, 不用知道代理了谁
    (2) 屏蔽了真实角色(RealSubject)的变更对高层类(场景类)的影响

    (3)真实的主题角色想怎么修改就怎么修改, 对高层次的模块没有任何的影响,只要你实现了接口所对应的方法, 该模式非常适合对扩展性要求较高的场合。

     2. 

    (1) 接口类

    package com.design.代理模式.第一阶段;
    
    public interface IGamePlayer {
        void login(String username , String pwd);
        
        void killBoss();
        
        void upgrade();
    }    
    View Code

    (2)真实角色

    package com.design.代理模式.普通代理;
    
    import com.design.代理模式.第一阶段.IGamePlayer;
    
    public class GamePlayer implements IGamePlayer {
        private String name = "";
        
        
        public GamePlayer(IGamePlayer _gamePlayer , String _name) throws Exception{
             
            // 只有代理才能创建对象
            if(_gamePlayer != null && _gamePlayer.getClass().getName().equals("com.design.代理模式.普通代理.GamePlayerProxy")){
                this.name = _name;
                
            }else{
                throw new Exception("不能创建真实角色");
            }
        }
    
        // 登录
        @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

    (3)proxy

    package com.design.代理模式.普通代理;
    
    import com.design.代理模式.第一阶段.IGamePlayer;
    
    public class GamePlayerProxy implements IGamePlayer {
        private IGamePlayer gamePlayer = null;
        
        
    
         public GamePlayerProxy(String name ) throws Exception{
             gamePlayer = new GamePlayer(this,name);
         }
        
        // 通过构造函数决定要对谁进行代练
        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

    (4) 场景类

    package com.design.代理模式.普通代理;
    
    import com.design.代理模式.第一阶段.IGamePlayer;
    
    public class Client {
        public static void main(String[] args) throws Exception {
            // 调用者只知道代理存在就可以, 不用知道代理了谁
            // 屏蔽了真实角色(RealSubject)的变更对场景类的影响
            /*
             * 真实的主题角色想怎么修改就怎么修改, 对高层次的模
                块没有任何的影响, 只要你实现了接口所对应的方法, 该模式非常适合对扩展性要求较高的
                场合。 当然, 在实际的项目中, 一般都是通过约定来禁止new一个真实的角色, 这也是一个
                非常好的方案。
             */
            IGamePlayer proxy = new GamePlayerProxy("lvyf");
            
            proxy.login("lvyafei", "123456");
            proxy.killBoss();
            proxy.upgrade();
        }
    }
  • 相关阅读:
    jmeter跨平台执行时的文件路径问题
    jenkins配置
    jmeter--负载测试
    jmeter-脚本制作
    jmeter学习-性能指标、jmeter初识
    功能测试--其他
    功能测试--Fiddler
    功能测试--APP专项
    功能测试--基础(二)
    功能测试-基础(一)
  • 原文地址:https://www.cnblogs.com/fubaizhaizhuren/p/5674304.html
Copyright © 2020-2023  润新知