代理:本来应该自己做的事,却请了别人来做
代理模式:说到代理模式也叫委托模式,那么肯定就有两种对象,一个被代理对象,一种是代理对象。
而代理模式就是代理对象提供一种代理从而控制对被代理对象的访问。
代理模式分类:1.普通代理 2.远程代理 3.保护代理 4.动态代理
此篇只给出普通代理模式,目的只是能初步理解代理模式,后面单拿出一篇会重点讲很重要的动态代理模式(spring框架离不开动态代理模式的运用)
人接口 :
package com.robert.proxy2;
public interface Person {
public void eat();
public void sleep();
}
被代理类:
package com.robert.proxy2;
public class Student implements Person{
private String name;
public Student(Person proxy,String name) {
this.name = name;
}@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println(this.name+"吃饭");
}@Override
public void sleep() {
// TODO Auto-generated method stub
System.out.println(this.name+"睡觉");
}
}
代理类:
package com.robert.proxy2;
public class ProxyStudent implements Person{
private Person proxyPerson;
public ProxyStudent(String name) {
super();
this.proxyPerson = new Student(this,name) ;
}@Override
public void eat() {
// TODO Auto-generated method stub
proxyPerson.eat();
}@Override
public void sleep() {
// TODO Auto-generated method stub
proxyPerson.sleep();
}
}
测试类:
package com.robert.proxy;
public class ProxyTest {
public static void main(String[] args) {
Person proxyPerson = new ProxyStudent( "小明");
proxyPerson.eat();
proxyPerson.sleep();
}
}
//这里我们代理学生只是帮被代理学生吃饭睡觉,哈哈其实这里逻辑不恰当,自行体会。自己改成任意demo都可,比如玩游戏,这就相当于代练,不需要知道给谁代,账号密码给了就行,当然这里是给的name普通代理模式的好处是:我不需要知道被代理对象是谁,只需要知道其用户名即可,即便代理类有所改变,但只要它实现了接口,就必须要重写接口中定义的方法,那么代理就没有影响!
后篇是动态代理模式,比较重要,对spring的底层的理解有很大帮助!!!