源代码
GitHub源代码
1.本文目标
本文目标是为了让大家认识并理解代理模式
2.基本套路
定义:为其他对象提供一种代理,以控制对这个对象的访问
类型:结构型
选择关键点:静态代理选择的关键点是是否要复用被代理的部分功能,动态代理选择的关键点在于能否在将被代理的这一批类当中,找出相同的切入点
设计原则:体现功能复用
使用概率:99.99999%
难度系数:中高
3.适用场景
1.保护目标对象
2.增强目标对象
4.使用步骤
1.代理模式有委托方和代理方
2.委托方定义接口和使用接口中的方法
3.代理方把代理对象传给委托方并实现委托方的接口,从而实现代理模式
5.举个栗子
我们用具体的代码去更好的理解这个设计模式
5.1栗子说明
- 背景:现在有一个 添加页面,联系人页面,当在添加页面中添加数据的时候,要把数据传递到联系人页面显示
- 目的:通过代理模式实现传递数据
5.2使用步骤
实现代码如下:
步骤1.创建委托方要定义接口(就是DataInterface)
public interface DataInterface {
/**
* 添加数据的方法
*/
void addData(AddController controller, String name);
}
步骤2.创建委托方,委托方使用接口中的方法
public class AddController {
//定义接口
public DataInterface mDataInterface;
public void addEvent(){
//使用接口中的方法
mDataInterface.addData(this,"黄晓明");
}
}
步骤3.创建代理方,实现接口
public class ContactController implements DataInterface{
@Override
public void addData(AddController page, String name) {
System.out.println("ContactController 添加数据成功 "+page.toString()+ " 名字:"+ name);
}
}
步骤4. 测试,代理方把代理对象传给委托方并实现委托方的接口,从而实现代理模式
public static void main(String[] args) {
AddController addController = new AddController();
ContactController contactController = new ContactController();
//代理方把代理对象传给委托方
addController.mDataInterface = contactController;
addController.addEvent();
}
6.优点
- 代理模式能将代理对象与真实被调用的目标对象分离
- 一定程度上降低了系统的耦合度,扩展性好
- 保护目标对象
- 增强目标对象
7.缺点
- 代理模式会早场系统设计中类的数目增加
- 在客户端和目标对象增加一个代理对象,会造成请求处理速度变慢
- 增加系统的复杂度
8.总结
本文只是对代理模式进行一个分享,接下来会从创建型模式,结构型模式,行为型模式,这三大类展开一个系列分享,大家可以持续进行关注,信仰年輕的设计模式,蟹蟹啦。
网友评论