• 对象结构型


    介绍

    * 为其他对象提供一种代理以控制对这个对象的访问
    * 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用
    

    代理模式的应用

    远程代理:屏蔽对象存在于不同空间的事实;如webservice是一门跨平台的技术,假设使用.net写的服务比java使用,那么就会生成一个java端的代理来供java代码使用
    虚拟代理:存放创建资源开销大的对象;如Hibernate中的load方法的懒加载
    安全代理:通过代理对象代理真是对象,从而控制真是对象的权限
    智能指引:当调用真实对象时,代理处理另外一些事情;如第一次引用持久化对象,会将其存到内存中
    

    参考自书籍《大话设计模式》

    入门案例:

    代码:
    Home:

    public interface Home {
        void get(String packageName);
    }
    

    XiaoMing:

    public class XiaoMing implements Home {
    
        @Override
        public void get(String packageName) {
        System.out.println("接收:" + packageName);
        }
    }
    

    MaMa:

    public class MaMa implements Home {
    
        private XiaoMing xiaoming;
    
        {
            this.xiaoming = new XiaoMing();
        }
    
        @Override
        public void get(String packageName) {
            System.out.println("妈妈代理小明接收包裹");
            xiaoming.get(packageName);
            System.out.println("妈妈代理小明接收完包裹了");
        }
    }
    

    测试:

    public class Main {
        public static void main(String[] args){
    
            /**
             * 模拟场景:
             *    小明在网上买了个女朋友,当天送到,但同时小明今天又约了朋友小强去网吧玩地下城
             *    因为妈妈也是这个家的成员,所以傻乎乎的快递员就同意让妈妈签收了
             *    这时,妈妈就充当代理(proxy)这个角色,来去代替小明接收这个网购的女朋友,然后交给小明
             */
    
            String packageName = "女朋友";
    
            MaMa maMa = new MaMa();
            maMa.get(packageName);
    
            /**
             * output:
             *  妈妈代理小明接收包裹
             *  接收:女朋友
             *  妈妈代理小明接收完包裹了
             */
        }
    }
    
  • 相关阅读:
    解决方案solution
    Marshal类
    鼠标钩子WH_MOUSE_LL和WH_MOUSE的区别
    DllImport
    打包.py文件成.exe
    C++定义全部变量注意项
    类.cpp文件不识别类.h所定义的结构体问题
    C++判断文件是否存在
    博客专栏
    软件测试基础知识
  • 原文地址:https://www.cnblogs.com/tandi19960505/p/8164277.html
Copyright © 2020-2023  润新知