• 对象结构型


    介绍

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

    代理模式的应用

    远程代理:屏蔽对象存在于不同空间的事实;如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:
             *  妈妈代理小明接收包裹
             *  接收:女朋友
             *  妈妈代理小明接收完包裹了
             */
        }
    }
    
  • 相关阅读:
    PIE-Basic 频率域滤波
    使用CefSharp前端后台交换
    CefSharp F12打开DevTools查看console js和c#方法互相调用
    js和C#互相调用
    C# 矢量图EMF 总结
    key
    关于IdentityServer4不使用MVC页面进行登录(跨域发送验证请求)的一些问题(前后端分离的验证)
    C#版的省份编码字典
    EFCore显示加载模式下,自动包含导航属性(只包含第一层的导航属性)的方法
    EFCore批量实现全局查询筛选器
  • 原文地址:https://www.cnblogs.com/tandi19960505/p/8164277.html
Copyright © 2020-2023  润新知