代理模式:
代理模式角色分为 4 种:
主题接口:定义代理类和真实主题的公共对外方法,也是代理类代理真实主题的方法;
真实主题:真正实现业务逻辑的类;
代理类:用来代理和封装真实主题;
Main:客户端,使用代理类和主题接口完成一些工作。
一个简单的静态代理demo:我们做个简单的,假设现在需要程序员,我们需要java程序员,java程序员的工作当然是codeing了。
但是对于项目不同,比如当前有个项目我们需要java程序员,但是我们希望项目开始的时候对程序员有个誓师大会,项目结束时候给程序员发个奖金。
那么这些工作是不能放在java程序员这个类中的。而且程序员也不希望这些个杂事来影响自己coding。那么我们就需要一个专业的助理来处理这些事情
这个助理就代为java程序员处理一些事情,而java程序员收到的任务就只有coding啦。 话不多说来看代码。
final:测试一下
=======================
来来来开会啦!!
Writing java code
来来来发奖金啦!!
=======================
以上就是静态代理,静态代理在实际使用的还是比较多的,比如我们要建立一个缓存机制,就可以使用静态代理。
比如想要从数据库中获取当前产品列表。
第一次从数据空中获取到之后,接下来请求都可以从缓存中读取,这样可以显著提高程序执行效率。
我们真正的数据库接口只负责从数据库中获取数据。
代理类第一步从本地缓存中读取,如果缓存中不存在数据,则从数据库中获取。
这样的做法,使的程序结构十分清晰,方便后期维护人员快速进入业务,即使以后新添加功能也能从容而定。不需要进行大量的修改
代理模式其实就是包装了真实的类,访问的时候最好使用包装类,在使用的时候中间隔了一层,就好像有时候你要找老板只能通过秘书来传达一样,秘书这里就可以理解为代理。
代理模式角色分为 4 种:
主题接口:定义代理类和真实主题的公共对外方法,也是代理类代理真实主题的方法;
真实主题:真正实现业务逻辑的类;
代理类:用来代理和封装真实主题;
Main:客户端,使用代理类和主题接口完成一些工作。
一个简单的静态代理demo:我们做个简单的,假设现在需要程序员,我们需要java程序员,java程序员的工作当然是codeing了。
但是对于项目不同,比如当前有个项目我们需要java程序员,但是我们希望项目开始的时候对程序员有个誓师大会,项目结束时候给程序员发个奖金。
那么这些工作是不能放在java程序员这个类中的。而且程序员也不希望这些个杂事来影响自己coding。那么我们就需要一个专业的助理来处理这些事情
这个助理就代为java程序员处理一些事情,而java程序员收到的任务就只有coding啦。 话不多说来看代码。
1.先定义一个接口,防止以后来了其他程序员。
public interface Coder {
public void coding();
}
2.定义一个java程序员
public class JavaCoder implements Coder{
@Override
public void coding() {
System.out.println("Writing java code");
}
}
3.接下来定义一个助理(也就是代理类)
public class CoderProxy implements Coder {
private JavaCoder javaCoder;
//1.先开会
//2.写代码吧
//3.项目结束发奖金
@Override
public void coding() {
openMeeting();
if (javaCoder == null) {
javaCoder = new JavaCoder();
javaCoder.coding();
}
distributeMoney();
}
private void openMeeting() {
System.out.println("来来来开会啦!!");
}
private void distributeMoney() {
System.out.println("来来来发奖金啦!!");
}
}
final:测试一下
public class Test {
public static void main(String[] args) {
CoderProxy coderProxy = new CoderProxy();
coderProxy.coding();
}
}
结果:
=======================
来来来开会啦!!
Writing java code
来来来发奖金啦!!
=======================
以上就是静态代理,静态代理在实际使用的还是比较多的,比如我们要建立一个缓存机制,就可以使用静态代理。
比如想要从数据库中获取当前产品列表。
第一次从数据空中获取到之后,接下来请求都可以从缓存中读取,这样可以显著提高程序执行效率。
我们真正的数据库接口只负责从数据库中获取数据。
代理类第一步从本地缓存中读取,如果缓存中不存在数据,则从数据库中获取。
这样的做法,使的程序结构十分清晰,方便后期维护人员快速进入业务,即使以后新添加功能也能从容而定。不需要进行大量的修改