小故事: 什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧;就比如古代每个男人的爱好–逛青楼;初来乍到的你肯定不知道哪个姑娘更加风情万种,所以这个时候你需要找到老鸨给你推荐(啧啧啧),老鸨其实就是这些姑娘们的代理人;那么用java程序怎么表示呢,接下来就见分晓
代码演示:
1、首先定义一种类型(既然都在青楼中,里面的姑娘肯定都是同一种类型,包括老鸨)
package com.design.dp.proxy;
// 定义姑娘们的类型以及她们能做的事情
public interface KindWomen {
// 姑娘们肯定都会招呼客官
void callCust();
// you know,happy
void happyWithMan();
}
2、既然知道了类型,那么下面就是具体的姑娘了
package com.design.dp.proxy;
// 这个是秋香,唐伯虎的最爱
public class QiuXiang implements KindWomen{
@Override
public void callCust() {
System.out.println("秋香正在招呼客人");
}
@Override
public void happyWithMan() {
System.out.println("秋香正在跟客人做一些不可描述的事情...");
}
}
package com.design.dp.proxy;
public class LaoBao implements KindWomen{
KindWomen kindWomen;
// 可以默认秋香接客哦
public LaoBao() { this.kindWomen = new QiuXiang();}
public LaoBao(KindWomen kindWomen) {
this.kindWomen = kindWomen;
}
// 老鸨一般都是正襟危坐,哈哈
@Override
public void callCust() {
this.kindWomen.callCust();
}
// 老鸨肯定不会再接客了,但是她会给你推荐姑娘啊
@Override
public void happyWithMan() {
this.kindWomen.happyWithMan();
}
}
3、姑娘们都已经迫不及待了,那么此时的大人物该出场了–武大郎
package com.design.dp.proxy;
// 武大郎深情款款的走来了
public class WuDaLang {
public static void main(String[] args) {
LaoBao laoBao = new LaoBao();
laoBao.callCust(); // 此时实际上是秋香在招呼武大郎
laoBao.happyWithMan(); // 然后秋香跟武大郎走进了房间...
}
}
实际上这就是典型的代理模式:武大郎通过老鸨跟秋香鬼混在了一起,如果没有老鸨这一代理人,那么潘金莲就会发现武大郎的鬼鬼祟祟了
总结: 代理模式主要使用了 Java 的多态,干活的是被代理类;代理类主要是接活;因为代理人跟被代理人实现了同一个接口,所以代理人清楚的知道被代理人的身体情况,能不能干活