设计模式:JDK静态代理之Thread/Runnable
来源:互联网 发布:工厂巡检记录数据 编辑:程序博客网 时间:2024/05/21 12:46
静态代理有如下要素:
1.目标角色(真实角色)。
2.代理角色。
3.目标角色和代理角色实现同一接口。
4.代理角色持有目标角色的引用。
下面的例子是一个简单的静态代理模式。
统一接口:
package com.xs.pattern.staticproxy;/** * 统一接口 * * @author Administrator * */public interface Callable {void call();}
目标角色:
package com.xs.pattern.staticproxy;/** * 目标角色 * * @author Administrator * */public class Target implements Callable {public void call() {System.out.println("call...");}}代理角色:
package com.xs.pattern.staticproxy;/** * 代理角色 * * @author Administrator * */public class Proxy implements Callable {Callable callable;public Proxy(Callable callable) {this.callable = callable;}public void call() {System.out.println("before...");callable.call();System.out.println("after...");}}测试:
package com.xs.pattern.staticproxy;public class StaticProxyApp {public static void main(String[] args) {Callable target = new Target();Callable proxy = new Proxy(target);proxy.call();}}输出:
before...call...after...
package com.xs.pattern.staticproxy;public class ThreadStaticProxy {public static void main(String[] args) {Runnable target = new MyTarget();// 目标角色Thread proxy = new Thread(target);// 代理角色proxy.start();}}class MyTarget implements Runnable {public void run() {System.out.println("run...");}}
线程体(也就是我们要执行的具体任务)实现了Runnable接口和run方法。同时Thread类也实现了Runnable接口。此时,线程体就相当于目标角色,Thread就相当于代理角色。当程序调用了Thread的start()方法后,Thread的run()方法会在某个特定的时候被调用。thread.run()方法:
public void run() {if (target != null) { target.run();} }实际上是执行了线程体的代码。
0 0
- 设计模式:JDK静态代理之Thread/Runnable
- 设计模式:JDK静态代理之Thread/Runnable
- 设计模式之代理模式(静态代理、JDK动态代理和cglib动态代理)
- 设计模式之代理模式-静态代理
- 设计模式之代理模式(静态代理)
- 设计模式之代理模式------静态代理
- 设计模式之静态代理
- 设计模式之静态代理
- 设计模式之静态代理
- 设计模式之静态代理设计模式
- 设计模式之静态代理&动态代理
- 线程创建:继承Thread、接口Runnable(静态代理模式)、接口CallableJAVA169-173
- JDK中的设计模式之代理模式
- 设计模式之代理模式--静态代理和动态代理
- java设计模式之静态代理模式
- 设计模式之静态代理模式
- java 设计模式之静态代理模式
- 设计模式之三静态代理模式
- FTP与SSH的区别
- leetcode Two Sum hash
- C++ primer习题笔记第1~3章
- 关联Android源代码
- 兄弟连,一般人来不起,来的肯定不是一般人!
- 设计模式:JDK静态代理之Thread/Runnable
- HDU 5131 Song Jiang's rank list
- 深入浅出Visual C++动态链接库(DLL)编程
- 用指针输入一个数组,逆序输出该数组
- a标签执行JS脚本
- PhotoView问题 ImageView no longer exists
- 10.序列和游标
- uml之交互图(时序图 和 协作图)
- ubuntu小技巧8——linux(ubuntu)下mysql安装问题