zoukankan      html  css  js  c++  java
  • 设计模式之--代理模式(普通代理模式)

    定义:provide a surrogate or palceholder for anthoer object to control access to it
       提供一个代理或者另一个对象的占位符来控制对原本对象的访问

    类图:
          

    分类:代理模式分为 普通代理、强制代理(访问该对象必须通过他的代理类)、动态代理

    一:接口

    package dmode.proxy;
    
    /** 
     * 类描述:  接口
     * @version 1.0  CreateDate: 2015-2-13
     *
     * @updateDate			
     * @updatePerson		
     * @declare 
     */
    public interface Subject {
    	
    	/**
    	 * 方法描述:打卡
    	 */
    	public void punchCard(String name,String company);
    	
    	/**
    	 * 方法描述:上班
    	 */
    	public void beOnDuty();
    	
    	/**
    	 * 方法描述:下班
    	 */
    	public void offDuty();
    }
      
    


    二: 实现类

    package dmode.proxy;
    
    /** 
     * 类描述:  员工
     * @version 1.0  CreateDate: 2015-2-13
     *
     * @updateDate			
     * @updatePerson		
     * @declare 
     */
    public class Employer implements Subject{
    
    	/**
    	*@see dmode.proxy.Subject#punchCard()
    	*/
    	@Override
    	public void punchCard(String name,String company) {
    		System.out.println(name + "上班打卡.......公司:" + company);
    	}
    
    	/**
    	*@see dmode.proxy.Subject#beOnDuty()
    	*/
    	@Override
    	public void beOnDuty() {
    		System.out.println("开始工作.......");
    	}
    
    	/**
    	*@see dmode.proxy.Subject#offDuty()
    	*/
    	@Override
    	public void offDuty() {
    		System.out.println("下班打卡.......");
    	}
    
    }
    

      

    三 代理类

    package dmode.proxy;
    
    /** 
     * 类描述:  代理类
     * @version 1.0  CreateDate: 2015-2-13
     *
     * @updateDate			
     * @updatePerson		
     * @declare 
     */
    public class StaProxy implements Subject{
    	
    	private Subject subImpler;
    	
    	public  void setProxyEmployer(Subject sub){
    		this.subImpler = sub;
    	}
    	
    	/**
    	 * 方法描述:预处理方法 aop 就是在方法前后做了这样的拦截预处理
    	 *
    	 */
    	public void before(){
    		System.out.println("预处理方法前.....");
    	}
    	
    	public void after(){
    		System.out.println("预处理方法后.....");
    	}
    
    	/**
    	 * 模拟环绕切割 
    	 *@see dmode.proxy.Subject#punchCard()
    	 */
    	@Override
    	public void punchCard(String name,String company) {
    		before();
    		subImpler.punchCard(name,company);
    		after();
    	}
    
    	/**
    	*@see dmode.proxy.Subject#beOnDuty()
    	*/
    	@Override
    	public void beOnDuty() {
    		subImpler.beOnDuty();
    	}
    
    	/**
    	*@see dmode.proxy.Subject#offDuty()
    	*/
    	@Override
    	public void offDuty() {
    		subImpler.offDuty();
    	}
    
    }
    

      

  • 相关阅读:
    2018/01/01Java基础学习——如何通过dos系统的javadoc命令生成API文档
    Go语言的big包实现大整数运算
    HDU5100 Chessboard【组合数学】
    HDU5143 NPY and arithmetic progression【暴力】
    UVALive5402 UVA579 Clock Hands【水题】
    UVA11799 Horror Dash【求极值+水题】
    HDU1017 ZOJ1152 A Mathematical Curiosity【暴力】
    UVALive2536 POJ1248 HDU1015 ZOJ1403 Safecracker【密码+暴力】
    POJ1284 Primitive Roots【原根】
    UVA11340 Newspaper【输入流+map】
  • 原文地址:https://www.cnblogs.com/leonkobe/p/4292485.html
Copyright © 2011-2022 走看看