zoukankan      html  css  js  c++  java
  • 12 代理模式

    核心作用:通过代理,控制对对象的访问。

    代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。

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

    AOP (Aspect Oriented Programming)面向切面编程的核心实现机制!

        代理对象UML图

    从图中,我们可以看到:

    1、抽象角色

    定义代理角色和真实角色对外的方法

    2、真实角色

    实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用

    3、代理角色

     实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。

    分类:

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

    动态代理:程序运行时运用反射机制动态创建而成。

    /**
     * 抽象角色
     * 
     * @author sun
     *
     */
    public interface Star {
        /**
         * 面谈
         */
        void confer();
    
        /**
         * 签合同
         */
        void signContract();
    
        /**
         * 订机票
         */
        void bookTicket();
    
        /**
         * 唱歌
         */
        void sing();
    
        /**
         * 收钱
         */
        void collectMoney();
    
    }
    /**
     * 真实角色
     * 
     * @author sun
     *
     */
    public class RealStar implements Star {
    
        @Override
        public void confer() {
            System.out.println("RealStar confer");
        }
    
        @Override
        public void signContract() {
            System.out.println("RealStar signContract");
        }
    
        @Override
        public void bookTicket() {
            System.out.println("RealStar bookTicket");
        }
    
        @Override
        public void sing() {
            System.out.println("RealStar(周杰伦) sing");
        }
    
        @Override
        public void collectMoney() {
            System.out.println("RealStar collectMoney");
        }
    
    }
    /**
     * 代理类
     * 
     * @author sun
     *
     */
    public class ProxyStar implements Star {
    	private Star star;
    
    	public ProxyStar(Star star) {
    		super();
    		this.star = star;
    	}
    
    	@Override
    	public void confer() {
    		System.out.println("ProxyStar confer");
    	}
    
    	@Override
    	public void signContract() {
    		System.out.println("ProxyStar signContract");
    
    	}
    
    	@Override
    	public void bookTicket() {
    		System.out.println("ProxyStar bookTicket");
    
    	}
    
    	@Override
    	public void sing() {
    		System.out.println("ProxyStar sing");
    
    	}
    
    	@Override
    	public void collectMoney() {
    		star.sing();
    	}
    
    }
    

      

    /**
     * 客户端测试
     * 
     * @author sun
     *
     */
    public class Client {
    	public static void main(String[] args) {
    		Star real = new RealStar();
    		ProxyStar proxyStar = new ProxyStar(real);
    		proxyStar.bookTicket();
    		proxyStar.confer();
    		proxyStar.collectMoney();
    		proxyStar.sing();
    		proxyStar.signContract();
    	}
    }
    

      

  • 相关阅读:
    Y+的一些讨论
    MATLAB中FFT的使用方法
    插入排序、冒泡排序、选择排序——转载
    输出控制中时间延迟的几种方法
    模拟通信调制方式与通信设备
    模拟通信主要特点
    模拟通信数字信号
    模拟通信
    传真存储变换设备与入网方式
    静止图像通信
  • 原文地址:https://www.cnblogs.com/sunTin/p/6675649.html
Copyright © 2011-2022 走看看