代理,顾名思义!
日常生活中的代理商等,都是对代理的诠释!
为其它对象提供一种代理以控制对这个对象的访问.
1,远程代理--也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实.
2,虚拟代理--是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象.
3,安全代理--用来控制真实对象访问时的权限,一般用于对象应该有不同的访问权限的时候.
4,智能指引--是指当调用真实对象时,代理处理另外一些事.
现在一个例子来分析!!
漂亮女孩实体
接口类(一组行为)
一个男孩Jason他拥有一些行为
另外一个男孩Jack,他也拥有一些行为,他要去帮Jason去送花等!但他自己也有一些特别的行为
测试:
输出:
[color=red]Jack主动送咖啡[/color]Jack-GiveChocolate()进入
Jason送巧克力给Tina
Jack-GiveDolls()进入
Jason送洋娃娃给Tina
Jack-GiveFlowers()进入
Jason送花给Tina
第一次送咖啡是Jack代表自己送给Tina的.
后面三次同样是Jack去送,但代表的不是自己而是Jason
看懂了吗?继续加油
日常生活中的代理商等,都是对代理的诠释!
为其它对象提供一种代理以控制对这个对象的访问.
1,远程代理--也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实.
2,虚拟代理--是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象.
3,安全代理--用来控制真实对象访问时的权限,一般用于对象应该有不同的访问权限的时候.
4,智能指引--是指当调用真实对象时,代理处理另外一些事.
现在一个例子来分析!!
漂亮女孩实体
public class BeautifulGirl {
private String name;
private char sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
}
接口类(一组行为)
public interface GiveGift {
//送洋娃娃
void GiveDolls();
//送花
void GiveFlowers();
//送巧克力
void GiveChocolate();
}
一个男孩Jason他拥有一些行为
public class Jason implements GiveGift {
private BeautifulGirl girl;
public Jason(){}
public Jason(BeautifulGirl bgirl){
this.girl = bgirl;
}
@Override
public void GiveChocolate() {
System.out.println("Jason送巧克力给"+this.girl.getName());
}
@Override
public void GiveDolls() {
System.out.println("Jason送洋娃娃给"+this.girl.getName());
}
@Override
public void GiveFlowers() {
System.out.println("Jason送花给"+this.girl.getName());
}
}
另外一个男孩Jack,他也拥有一些行为,他要去帮Jason去送花等!但他自己也有一些特别的行为
public class Jack implements GiveGift {
public Jason jason;
public Jack(){}
public Jack(BeautifulGirl girl){
this.jason = new Jason(girl);
}
@Override
public void GiveChocolate() {
System.out.println("Jack-GiveChocolate()进入");
jason.GiveChocolate();
}
@Override
public void GiveDolls() {
System.out.println("Jack-GiveDolls()进入");
jason.GiveDolls();
}
@Override
public void GiveFlowers() {
System.out.println("Jack-GiveFlowers()进入");
jason.GiveFlowers();
}
public void GiveCoffee(){
System.out.println("Jack主动送咖啡");
}
}
测试:
public class Test {
public static void main(String[] args) {
BeautifulGirl girl = new BeautifulGirl();
girl.setName("Tina");
Jack man = new Jack(girl);
man.GiveCoffee();
man.GiveChocolate();
man.GiveDolls();
man.GiveFlowers();
}
}
输出:
[color=red]Jack主动送咖啡[/color]Jack-GiveChocolate()进入
Jason送巧克力给Tina
Jack-GiveDolls()进入
Jason送洋娃娃给Tina
Jack-GiveFlowers()进入
Jason送花给Tina
第一次送咖啡是Jack代表自己送给Tina的.
后面三次同样是Jack去送,但代表的不是自己而是Jason
看懂了吗?继续加油