三、静态代理模式静态代理模式
静态代理模式
静态代理是多线程底部的原理,在 Java 中线程的设计就使用了静态代理设计模式,其中自定义线程类及Thread类都是实现了Runnable接口。
在创建子线程的时候,传入了自定义线程类的引用,再通过调用start()方法,调用自定义线程对象的run()方法。实现了线程的并发执行。
概要
- 真实对象和代理对象都要实现同一个接口
- 代理对象要代理真实角色
- 真实对象只专注于自己的功能,代理对象可以帮忙做其他的事
步骤
示例
public class StaticProxy { public static void main(String[] args) { Wedding wedding = new Wedding(new You()); wedding.happyMarry(); } } interface Marry { void happyMarry(); } // 真实角色,结婚的人是你 class You implements Marry { @Override public void happyMarry() { System.out.println("你要结婚了"); } } // 代理角色,帮助目标结婚 class Wedding implements Marry { // 代理目标,即真实角色 private Marry target; public Wedding(Marry target) { // 通过构造参数获取代理目标 this.target = target; } @Override public void happyMarry() { before(); this.target.happyMarry(); after(); } private void before() { System.out.println("结婚前,布置现场"); } private void after() { System.out.println("结婚后,收尾款"); } }对比
将上述示例中的执行代码
Wedding wedding = new Wedding(new You()); wedding.happyMarry();精简后可得:
new Wedding(new You()).happyMarry();而创建一个线程的代码
new Thread(new Runnable() {...}).start();(简化为 lambda 表达式后):
new Thread(() -> ...).start();正好与之对应,即new 代理(new 真实).实现方法()