静态代理:
类似于游戏mod,多用于对原有对象的逻辑扩充。通过让代理类持有目的对象,然后令原有对象调用代理类方法,以期在原有对象的基础上完成更多业务逻辑。
Thread就是一种静态代理。
package A;
/**
* 静态代理
* 公共接口:
* 1、真实角色
* 2、代理角色
*/
public class a {
public static void main(String[] args) {
new WeddingCompany(new You()).happyMarry();
//类比new Thread(线程对象).start();
}
}
interface Marry{
void happyMarry();
}
//真实角色
class You implements Marry{
@Override
public void happyMarry() {
System.out.println("you and 嫦娥终于奔月了....");
}
}
//代理角色
class WeddingCompany implements Marry{
//真实角色
private Marry target;
public WeddingCompany(Marry target) {
this.target = target;
}
@Override
public void happyMarry() {
ready();
this.target.happyMarry();
after();
}
private void ready() {
System.out.println("布置猪窝。。。。");
}
private void after() {
System.out.println("闹玉兔。。。。");
}
}
Thread类:
Thread实现了Runnable接口:
public class Thread implements Runnable
在创建Thread类对象时,可为该对象指定名称:
public Thread(Runnable target, String name)
实例:
public class Racer implements Runnable {
private String winner;
@Override
public void run() {
for(int i=1;i<=100;i++){
if(Thread.currentThread().getName().equals("兔子")&&i%10==0){
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"-->"+i);
if(gameOver(i)){
break;
}
}
}
boolean gameOver(int step) {
if(winner!=null){
return true;
}else{
if(step==100){
winner = Thread.currentThread().getName();
System.out.println("winner==>"+winner);
return true;
}
}
return false;
}
public static void main(String[] args) {
Racer r = new Racer();
new Thread(r,"乌龟").start();
new Thread(r,"兔子").start();
}
}