当前位置: 移动技术网 > IT编程>开发语言>Java > 设计模式之代理模式

设计模式之代理模式

2018年07月19日  | 移动技术网IT编程  | 我要评论

代理模式的特点:

  1. 抽象角色(接口):通过接口或抽象类声明真实角色实现的业务方法(两个类继承自同一个接口)。
  2. 代理角色(代理类):实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
  3. 真实角色(被代理类):实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用

在Java多线程中的实现中使用了代理模式。当我们需要开启多线程执行某一项任务时,需要创建一个我们自己定义的被代理类,比如DoWork,它继承自Runnable,并重写run()抽象方法,也就是真实角色所要实现的业务逻辑。系统提供的类Thread也继承自Runnable,同样也实现了run()抽象方法,把DoWork的对象doWork当作参数传入Thread的构造方法中,这时候在Thread实现的run()当中去调用doWork的run()方法,从而实现代理。

一般来说,代理模式都是在代理类(Thread)所实现的抽象方法(run())中去调用被代理类(DoWork)已经实现好的抽象方法(run()),如下图,target就是DoWork的实例。但Thread的对象thread如果直接执行run()方法,会把 run 方法当成一个 main 线程下的普通方法去执行,并不会开启另外一个线程中执行,还是在主线程里执行,所以这并不是多线程工作。

public class Thread implements Runnable {
 // 忽略其他方法......
  private Runnable target;
  @Override
  public void run() {
      if (target != null) {
          target.run();
      }
  }
}
@FunctionalInterface
public interface Runnable {
    public abstract void run();
}

而thread调用start()方法,可启动线程并使线程进入就绪状态,当分配到时间片后就可以开始运行了。 start() 会执行线程的相应准备工作,然后自动执行thread的run()方法的内容,这是真正的多线程工作。 

 

本文地址:https://blog.csdn.net/lcd493357984/article/details/107419305

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网