• Java中静态代理


    最近我一直想搞清楚Java中的代理问题。一直都只是听说,还没有真正领教。
    于是我就在网上找了一下,说得不是很明白,然后我又在视频里找了一下,有一个叫兄弟连的视频给了介绍,虽然那些风格我不是很喜欢,不过也算是说得明明白白。我同学说马士兵讲得不错,因为看了这个视频,也就不想再找了。
    视频里是举了一个形象的例子: 一个妹子请媒婆来给她找一个如意郎君。而这里的媒婆就是我们所说的那个代理类。代理模式是为其它对象提供一种代理以控制对这个对象的访问。说白了,就是说代理类挡在了被代理类前面为被代理类提供一个筛选的功能。这里的媒婆就是起到了这一层筛选的作用。媒婆可按妹子提供的条件为妹子挑选如意郎君,条件成立后,让妹子(被代理人)去相亲。
    如下:
    ProxyDemo.java
    public class ProxyDemo {
    	
    	public static void main(String[] args) {
    		Person p = new Person("张三");
    		Matchmaker mm = new Matchmaker(p);
    		mm.miai();
    	}
    }
    Subject.java
    public interface Subject {
    	public void miai();
    }


    Matchmaker.java
    
    public class Matchmaker implements Subject{
    
    	private Subject subject; // 要代理的目标对象
    	private boolean flag; // 是否满足条件标记
    	
    	public Matchmaker(Subject subject) {
    		this.subject = subject;
    	}
    	
    	public void befor(int condition) {
    		System.out.println("媒人正在为代理人挑选如意郎君 . . .");
    		if(condition >=165 && condition <=180) { // person给出的筛选条件
    			System.out.println("已找到合适的人选");
    			flag = true; // 设置满足条件标记为真
    		}else{
    			System.out.println("未找到合适的人选");
    			flag = false; // 设置满足条件标记为真
    		}
    	}
    	
    	public void after() {
    		if(flag) System.out.println("本次相亲圆满结束。");
    		else System.out.println("本次相亲未成功。");
    	}
    	
    	@Override
    	public void miai() {
    		befor(170); // 传一个身高为170cm的参数
    		if(flag) subject.miai();
    		after();
    	}
    }
    


    Person.java
    public class Person implements Subject {
    
    	private String name;
    	public Person(String name) {
    		this.name = name;		
    	}
    
    	@Override
    	public void miai() {
    		System.out.println(name + "正在相亲中。。。");
    	}
    
    }
    


    这里的代理人和被代理人都得实现相亲这个主题的接口,因为代理人和被代理人是因为相亲这件事才有代理人与被代理人的这层关系。
  • 相关阅读:
    【转】Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
    使用cacti监控服务器
    Vsphere client 无法登陆VCenter 处理的方法
    ESXI主机打开shell后主机警告处理
    Kiwi Syslog server 日志服务器搭建
    Linux lamp环境编译安装
    tar.bz2解压
    安装 MYSQL exec: g++: not found 报错
    mysql 编译安装提示“checking for termcap functions library... configure: error: No curses/termcap library found”
    Linux mysql 数据库忘记root密码
  • 原文地址:https://www.cnblogs.com/fengju/p/6336182.html
Copyright © 2020-2023  润新知