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

  

posted @ 2019-12-03 15:21  Scorpicat  阅读(185)  评论(0编辑  收藏  举报