• 设计模式(八)Proxy Parttern 代理模式


    核心作用:

    通过代理,控制对对象的访问

    可以详细控制某个对象的方法,在调用这个方法做前置处理,调用这个方法后做后置处理(AOP的微观实现)

    AOP(Aspect Oriented Programming)

    面向切面编程的核心实现机制

    核心角色:

    抽象角色:定义代理角色和真实角色的公共对外方法

    真实角色:实现抽象角色,定义真实角色索要实现的业务逻辑,供代理角色调用(关注真正的业务逻辑)

    代理角色:实现抽象角色,是真实的角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作(将统一的流程控制放到代理角色中进行处理)

    应用场景:

    安全代理:屏蔽对真实角色的直接访问

    远程代理:通过代理类处理远程方法调用(RMI)

    延迟加载:先加载轻量级的代理对象,真正需要再加载真实对象

    分类:

    静态代理:静态定义代理类

    动态代理:动态生成代理类

    jdk自带的动态代理

    javaassist字节码操作库实现

    CGLIB

    ASM(底层使用指令)

    举例:

    歌手唱歌

    package com.littlepage.ProxyParttern;
    
    public interface Star {
        //面谈
        void confer();
        //签合同
        void signContract();
        //订票
        void bookTicket();
        //唱歌
        void sing();
        //收钱
        void collectMoney();
    }
    package com.littlepage.ProxyParttern;
    
    public class ProxyStar implements Star{
        private Star star;
        
        public ProxyStar(Star star) {
            super();
            this.star = star;
        }
    
        @Override
        public void confer() {
            System.out.println("Proxy Star Confer");
        }
    
        @Override
        public void signContract() {
            System.out.println("Proxy Star SignContract");
        }
    
        @Override
        public void bookTicket() {
            System.out.println("Proxy Star BookTicket");
        }
    
        @Override
        public void sing() {
            star.sing();
        }
    
        @Override
        public void collectMoney() {
            System.out.println("Proxy Star CollectMoney");
        }
    }
    package com.littlepage.ProxyParttern;
    
    public class RealStar implements Star{
    
        @Override
        public void confer() {
            System.out.println("Real Star Confer");
        }
    
        @Override
        public void signContract() {
            System.out.println("Real Star SignContract");
        }
    
        @Override
        public void bookTicket() {
            System.out.println("Real Star BookTicket");
        }
    
        @Override
        public void sing() {
            System.out.println("Real Star Sing");
        }
    
        @Override
        public void collectMoney() {
            System.out.println("Real Star CollectMoney");
        }
        
    }
    package com.littlepage.ProxyParttern;
    
    public class Client {
        public static void main(String[] args) {
            RealStar rs=new RealStar();
            ProxyStar ps=new ProxyStar(rs);
            
            ps.confer();
            ps.signContract();
            ps.bookTicket();
            ps.sing();
        }
    }

    UML图:

  • 相关阅读:
    CentOS 7 使用NVM管理nodejs(转)
    Linux下Git安装及配置 (转)
    linux添加计划任务(转载)
    centos编译libcurl库找不到ssl的问题
    windows下搭建nginx+php+虚拟主机配置过程(转)
    xocde中宏定义使用
    unity shader vs高亮提示插件
    xcode8 自动打包
    3DMax中如何刷顶点色
    Adreno Profiler调试注意事项
  • 原文地址:https://www.cnblogs.com/littlepage/p/10137187.html
Copyright © 2020-2023  润新知