1 静态代理模式概念和代码:
/** * 静态代理 设计模式 * 1、真实角色 * 2、代理角色: 持有真实角色的引用 * 3、二者 实现相同的接口 * * @author Administrator * */ //接口 interface Marry{ public abstract void marry(); } public class StaticProxy { /** * @param args */ public static void main(String[] args) { //创建真实角色 Marry you =new You(); //创建代理角色 +真实角色的引用 WeddingCompany company =new WeddingCompany(you); //执行任务 company.marry(); } } //真实角色 class You implements Marry{ @Override public void marry() { System.out.println("you and 嫦娥结婚了...."); } } //代理角色 class WeddingCompany implements Marry{ private Marry you; public WeddingCompany() { } public WeddingCompany(Marry you) { this.you = you; } private void before(){ System.out.println("布置猪窝...."); } private void after(){ System.out.println("闹玉兔...."); } @Override public void marry() { before(); // 代理对象的方法 you.marry();// 使用真实对象的方法 after();// 代理对象的方法 } }
2 线程类Thread中静态代理模式:
Thread是代理类,在 new Thread(目标类), 目标类 implements Runnable 接口 Runnable 方法run() 然后在代理类的 run(){ 调用目标类.run()}
创建线程使用静态代理写法:
/** * 方便共享资源 * @author Administrator * */ public class Web12306 implements Runnable { private int num =50; @Override public void run() { while(true){ if(num<=0){ break; //跳出循环 } System.out.println(Thread.currentThread().getName()+"抢到了"+num--); } } public static void main(String[] args) { //真实角色 Web12306 web = new Web12306(); //代理 Thread t1 =new Thread(web,"路人甲"); Thread t2 =new Thread(web,"黄牛已"); Thread t3 =new Thread(web,"攻城师"); //启动线程 t1.start(); t2.start(); t3.start(); } }