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;
}
}

浙公网安备 33010602011771号