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

    代理模式分为两种:静态代理和动态代理。

    静态代理:代理类是由我们手动添加class类来实现,而动态代理类是由程序来生成代理类,代理无论是在生活中还是在程序中都有大量使用,如经纪人代理明星签合同,安排演出,回收尾款等操作都是通过代理完成,而具体唱歌则是有明星来完成。静态代理类和被代理类需要实现同一接口,而且由于代理类有些方法最终还是得调用被代理类来完成,所以静态代理类中还得持有被代理类的引用 

    public interface Star {
    	//签合同
    	void signContract();
    	//唱歌
    	void sing();
    	//收尾款
    	void collectMoney();
    }
    //======================================
    public class ProxyStar implements Star {
    	private Star star;
    	
    	public ProxyStar(Star star) {//通过注入持有被代理对象的引用
    		super();
    		this.star = star;
    	}
    
    	@Override
    	public void signContract() {
    		System.out.println("ProxyStar 签合同"); //这些方法都可以由代理对象,经纪人来完成
    	}
    
    	@Override
    	public void sing() {
    		star.sing();//调用被代理对象 唱歌 方法 ,因为唱歌这个方法必须由明星本人完成 代理对象无法代劳
    	}
    
    	@Override
    	public void collectMoney() {
    		System.out.println("ProxyStar 收尾款");
    	}
    
    }
    //=============================================
    public class RealStar implements Star {
    
    	@Override
    	public void signContract() {
    		System.out.println("RealStar 签合同");
    	}
    
    	@Override
    	public void sing() {
    		System.out.println("RealStar 唱歌");
    	}
    
    	@Override
    	public void collectMoney() {
    		System.out.println("RealStar 收尾款");
    	}
    }
    //=========================================
    	@Test
    	public void func()
    	{
    		Star realStar=new RealStar();
    		Star proxyStar=new ProxyStar(realStar); //注入被代理对象
    		proxyStar.signContract();//这些事情由经纪人完成
    		proxyStar.sing();//这些事情由明星本人完成
    		proxyStar.collectMoney();//这些事情由经纪人完成
    	}
    

      

  • 相关阅读:
    syslog命令
    linux命令 info
    Alibaba(阿里) RocketMQ入门实例
    java基础-学java util类库总结
    java 23种设计模式教程
    Linux
    Scrapy框架
    MongoDB的安装与使用
    爬虫小案例——爬取天猫
    爬虫小案例——爬取豆瓣电影
  • 原文地址:https://www.cnblogs.com/javabg/p/7620115.html
Copyright © 2011-2022 走看看