代理模式:为其他对象提供一种代理以控制对这个对象的访问
结构图如下:
实例:来自大话设计模式
张同学喜欢隔壁班的李娇娇,但不好意思送礼物,于是让自己的好朋友李同学替自己去送礼物,李同学相当于一个代理
//被追求者
class SchoolGirl
{
private String name;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
//送礼物代理接口
interface GiveGift
{
void GiveDolls();
void GiveFlowers();
void GiveChocolate();
}
//追求者实现类 张同学
class Pursuit implements GiveGift
{
SchoolGirl mm;
public Pursuit(SchoolGirl mm){
this.mm = mm;
}
@Override
public void GiveDolls() {
System.out.println("送你洋娃娃");
}
@Override
public void GiveFlowers() {
System.out.println("送你花");
}
@Override
public void GiveChocolate() {
System.out.println("送你巧克力");
}
}
//代理类 李同学 让代理类也实现送礼物的接口
class Proxy implements GiveGift
{
Pursuit gg;
public Proxy(SchoolGirl mm){
gg = new Pursuit(mm);
}
@Override
public void GiveDolls() {
gg.GiveDolls(); //代替gg送洋娃娃
}
@Override
public void GiveFlowers() {
gg.GiveFlowers(); //代替gg送洋花
}
@Override
public void GiveChocolate() {
gg.GiveChocolate(); //代替gg送巧克力
}
}
public class ProxyMain {
public static void main(String[] args) {
SchoolGirl jiaojiao = new SchoolGirl();
jiaojiao.setName("李娇娇");
Proxy daili = new Proxy(jiaojiao);
daili.GiveDolls();
daili.GiveFlowers();
daili.GiveChocolate();
}
}