7、代理模式

代理,顾名思义!
日常生活中的代理商等,都是对代理的诠释!

为其它对象提供一种代理以控制对这个对象的访问.
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

看懂了吗?继续加油
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值