• Java 基础(接口的应用:代理模式 Proxy)


    • 概述:
      代理模式是Java开发中使用较多的一种设计模式。代理设计就是为其他对象提供一种代理以控制对这个对象的访问。

    • 应用场景:

    安全代理: 屏蔽对真实角色的直接访问。I
    远程代理: 通过代理类处理远程方法调用(RMI)
    延迟加载: 先加载轻量级的代理对象,真正需要再加载真实对象。比如你要开发一个大文档查看软件,大文档中有大的图片,有可能一个图片有100MB,在打开文件时,不可能将所有的图片都显示出来,这样就可以使用代理模式,当需要查看图片时,用proxy来进行大图片的打开。

    • 分类:

    静态代理(静态定义代理类)
    动态代理 (动态生成代理类)
    JDK自带的动态代理,需要反射等知识

    NetWorkTest.java

    package com.klvchen.java1;
    
    public class NetWorkTest {
    	public static void main(String[] args) {
    		Server server = new Server();
    		ProxyServer proxyServer = new ProxyServer(server);
    		
    		proxyServer.browse();
    	}
    
    }
    
    interface NetWork{
    	
    	public void browse();
    	
    }
    
    //被代理类
    class Server implements NetWork{
    
    	@Override
    	public void browse() {
    		System.out.println("真实的服务器访问网络");
    	}
    	
    }
    
    //代理类
    class ProxyServer implements NetWork{
    	
    	private NetWork work;
    	
    	public ProxyServer(NetWork work) {
    		this.work = work;
    	}
    	
    	public void check() {
    		System.out.println("联网之前的检查工作");
    	}
    
    	@Override
    	public void browse() {
    		check();
    		
    		work.browse();
    		
    	}
    }
    

    静态代理

    StaticProxyTest.java

    package com.klvchen.java1;
    
    public class StaticProxyTest {
    	
    	public static void main(String[] args) {
    		Star s = new Proxy(new RealStar());
    		s.confer();
    		s.signContract();
    		s.bookTicket();
    		s.sing();
    		s.collectMoney();
    	}
    
    }
    
    interface Star{
    	void confer(); // 面议
    	
    	void signContract(); // 签合同
    	
    	void bookTicket(); // 订票
    	
    	void sing(); // 唱歌
    	
    	void collectMoney(); // 收钱
    }
    
    class RealStar implements Star {
    
    	@Override
    	public void confer() {		
    	}
    
    	@Override
    	public void signContract() {
    
    	}
    
    	@Override
    	public void bookTicket() {
    
    	}
    
    	@Override
    	public void sing() {
    		System.out.println("明星, 唱歌~~~~");
    	}
    
    	@Override
    	public void collectMoney() {
    
    	}
    	
    }
    
    //代理类
    class Proxy implements Star{
    	private Star real;
    	
    	public Proxy(Star real) {
    		super();
    		this.real = real;
    	}
    
    	@Override
    	public void confer() {
    		System.out.println("经纪人面谈");
    	}
    
    	@Override
    	public void signContract() {
    		System.out.println("经纪人签合同");		
    	}
    
    	@Override
    	public void bookTicket() {
    		System.out.println("经纪人订票");		
    	}
    
    	@Override
    	public void sing() {
    		real.sing();
    	}
    
    	@Override
    	public void collectMoney() {
    		System.out.println("经纪人收钱");		
    	}
    	
    }
    

  • 相关阅读:
    你看懂了程序员的这些笑话吗?
    SharePoint 2013 Designer 自己定义操作菜单
    Ubuntu下用glade和GTK+开发C语言界面程序(三)——学习make的使用方法
    【九】注入框架RoboGuice使用:(Your First Injected Service and BroadcastReceiver)
    LeetCode 122 Best Time to Buy and Sell Stock II
    Cocos2d-x 3.1.1 学习日志6--30分钟了解C++11新特性
    HDU 4914 Linear recursive sequence(矩阵乘法递推的优化)
    TS4
    angularjs1-过滤器
    angularjs1- ng-include
  • 原文地址:https://www.cnblogs.com/klvchen/p/14537507.html
Copyright © 2020-2023  润新知