一、 问题描述
- 校园中有个男孩(Pursuit)爱慕一个女孩(SchoolGirl),但是非常腼腆,无法直接送出礼物(洋娃娃、鲜花、巧克力)表明心意。恰巧这个男孩有个不错的兄弟(Proxy)乐意代男孩将礼物送给女孩。请写出一个程序描述这个的情景,将男孩的礼物通过他的兄弟送给女孩。
二、 完成如下题目要求
- 画出静态图
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210421225859389.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0gwbGx5TGlhbmc=,size_16,color_FFFFFF,t_70)
- 写出采用该设计模式的好处
一、远程代理,也就是一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
二、虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。
三、安全代理,用来控制真实对象访问时的权限。
四、智能指引,是指当调用真实的对象时,代理处理另外一些事。
- 编写代码
public class Main {
public static void main(String[] args) {
Beauty beauty=new Beauty();
beauty.setName("BigBeauty");
Proxy proxy = new Proxy(beauty);
proxy.GiveDolls();
proxy.GiveFlowers();
proxy.GiveChocolate();
}
}
public class Beauty {
private String name;
public Beauty() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
interface GiveGift {
void GiveDolls();
void GiveFlowers();
void GiveChocolate();
}
public class Pursuit implements GiveGift {
Beauty beauty;
public Pursuit(Beauty beauty) {
super();
this.beauty = beauty;
}
@Override
public void GiveDolls() {
System.out.println(beauty.getName()+",送你洋娃娃");
}
@Override
public void GiveFlowers() {
System.out.println(beauty.getName()+",送你鲜花");
}
@Override
public void GiveChocolate() {
System.out.println(beauty.getName()+",送你巧克力");
}
}
Pursuit shyBoy;
public Proxy(Beauty beauty) {
super();
this.shyBoy = new Pursuit(beauty);
}
@Override
public void GiveDolls() {
shyBoy.GiveDolls();
}
@Override
public void GiveFlowers() {
shyBoy.GiveFlowers();
}
@Override
public void GiveChocolate() {
shyBoy.GiveChocolate();
}
}