下简述一下代理模式是什么,一天小明送小红一个礼物,但这个礼物其实是小雷送的,小明只是代理人,小红永远都不会知道小雷,小明(代理)承包了一切动作~~~这就是代理模式。
同样现在有一个需求:模仿小红、小雷、小明三者的关系。首先小明和小雷都需要有送礼物的个方法,所以我们可以把送的方法用接口类写
送礼物接口类
package ProxyPattern;
public interface IGiveGift {
void giveDolls();
void giveFlowers();
void giveChocolate();
}
小雷类
package ProxyPattern;
public class Pursuit implements IGiveGift{
SchoolGirl sg;
public Pursuit(SchoolGirl sg) {
this.sg = sg;
}
@Override
public void giveDolls() {
// TODO Auto-generated method stub
System.out.println(sg.getName()+"送你玩具");
}
@Override
public void giveFlowers() {
// TODO Auto-generated method stub
System.out.println(sg.getName()+"送你花");
}
@Override
public void giveChocolate() {
// TODO Auto-generated method stub
System.out.println(sg.getName()+"送你巧克力");
}
}
小明类
package ProxyPattern;
public class Proxy implements IGiveGift{
Pursuit ps;
public Proxy(SchoolGirl sg) {
// TODO Auto-generated constructor stub
ps = new Pursuit(sg);
}
@Override
public void giveDolls() {
ps.giveDolls();
}
@Override
public void giveFlowers() {
ps.giveFlowers();
}
@Override
public void giveChocolate() {
ps.giveChocolate();
}
}
界面类(这里的话我们需要关注new Proxy(sg)这一行,这里我们把sg对象传进构造函数,小明的构造函数调用小军构造函数构造出小军,然后小明的送礼物方法都其实是调用小军的送礼物方法~~~)
package ProxyPattern;
public class Main {
public void PrintFrame(){
System.out.println("********代理模式********");
SchoolGirl sg = new SchoolGirl();
sg.setName("牧奴娇");
Proxy py = new Proxy(sg);
py.giveDolls();
py.giveFlowers();
py.giveChocolate();
}
public static void main(String[] args) {
Main m = new Main();
m.PrintFrame();
}
}
结果
说一下代理模式的好处吧:①隐藏真实对象信息,比如说远程代理,虚拟gps~~,②节省开销,可以使用它存放需要实例化很长时间的对象,比如打开一个超大的HTML总是能很快打开,但是加载图片却要一张张下载③权限控制,这个很明显了④智能指引~~这个不懂不说了。
Ending... ...
简单来说:
普通过程:真实的类调用真实的方法
模式过程:把真实的类关注入到代理类中,代理方法也其实调用真实类的方法,但对使用者来说,他就是在操作代理类,他不知道真实类。