28 多线程(二)——静态代理设计模式
引入
在前一节我们学习了实现Runnable接口创建线程,其中提到只使用一次对象时使用匿名对象,如:
new Thread(new xxx().start();//xxx为实现了Runnable的类
Thread就是一个静态代理,使用了这种方法,xxx类无需继承Thread类,就可以通过Thread类创建一个线程。
Thread就和装饰类的作用相似,都是包装一个对象。
那么,静态代理设计模式的特点就是:
- 代理者与被代理者都继承同一个接口(Thread与xxx继承的是Runnable接口)
- 代理者类中有一个被代理者的示例
- 代理者做绝大多数活
示例
接下来,我们做一个婚庆公司的静态代理。婚庆公司只需要传入一对新人,就可以为它们操办一切婚事。
婚庆公司就是代理者,新人就是被代理人,它们实现同一个接口:结婚。
package _20191203; /** * 静态代理设计模式 * @author UID * 婚庆公司作为代理,为新人办婚宴 */ public class StaticAgentModel { public static void main(String[] args) { new MarryCompany(new Couple("小明","小红")).marry(); //是不是和new Thread(new xxx()).start();一样? } } interface Marry{//代理者与被代理者都需要实现的接口 void marry(); } class Couple implements Marry{ private String groom;//新郎 private String bride;//新娘 public Couple(String groom,String bride) { this.groom = groom; this.bride = bride; } @Override public void marry() { System.out.println(groom+"和"+bride+"双双入洞房..."); } } class MarryCompany implements Marry{ private Couple cp ; @Override public void marry() {//婚庆公司代理装饰 System.out.println("置办婚宴");//替换为方法会比较好 System.out.println("司仪主持"); cp.marry(); System.out.println("婚宴善后"); } public MarryCompany(Couple cp) { this.cp = cp; } }