下图为所有设计模式,带标记为重点掌握以及工作中常用到的:
代理模式是属于结构型模式之一,其作用是为其他对象提供一种代理以控制对这个对象的访问。说到代理这个词语,大家可能就会觉得熟悉一些,我们熟知的代理有反向代理和正向代理等,只要理解到代理这个词语的含义,代理模式就可以很好的理解。
模式名称 | 优点 | 缺点 | 应用场景 |
---|---|---|---|
代理模式 | 1、职责清晰。 2、高扩展性。 3、智能化。 | 1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。 | Spring容器中创建的对象、AOP |
注意事项:
1、和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。
2、和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。
代理模式
1、创建一个金莲和王婆的接口类
/**
* 定义一种类型的女人,王婆和金莲都属于这类型的人
*
* @author wyj
* @date 2022/1/22 11:00
*/
public interface KindWoman {
// 向男人抛媚眼
void makeEyesWithMan();
// 和男人开心的玩
void happyWithMan();
}
2、创建潘金莲类
public class PangJinLian implements KindWoman {
@Override
public void makeEyesWithMan() {
System.out.println("金莲抛媚眼。。。");
}
@Override
public void happyWithMan() {
System.out.println("金莲正在高兴的玩。。。");
}
}
3、创建王婆代理类
/**
* 王婆类: 王婆这个人很聪明,她太老了,男人都看不上她 但是她有智慧经验啊,她作为金莲的代理
*
* @author wyj
* @date 2022/1/22 11:00
*/
public class WangPo implements KindWoman {
private KindWoman kindWoman;
public WangPo() {
// 默认作为金莲的代理
kindWoman = new PangJinLian();
}
// 也可以作为其它女人的代理类
public WangPo(KindWoman kindWoman) {
this.kindWoman = kindWoman;
}
@Override
public void makeEyesWithMan() {
// 年纪大了,没人看她抛媚眼,让年轻的抛
this.kindWoman.makeEyesWithMan();
}
@Override
public void happyWithMan() {
// 自己老了,干不了了,让年轻的代替
this.kindWoman.happyWithMan();
}
}
4、创建西门庆类进行勾搭
public class XimenQing {
public static void main(String[] args) {
// 把王婆叫出来
WangPo wangPo = new WangPo();
// 西门庆和金莲抛媚眼
wangPo.makeEyesWithMan();
// 西门庆和金莲做开心的事情
wangPo.happyWithMan();
}
}
5、测试结果
小结
根据上面的例子,大家可能稍微对代理模式有点点理解了吧。说白了就是西门庆想勾搭金莲,但是金莲不好意思回复西门庆,于是找王婆帮忙作为代理。王婆只是个中间人,实际底层做事情的还是金莲,王婆不仅仅可以做金莲的代理还可以做像金莲这类似的女人的代理类。