首页
Linux教程
Linux资讯
Linux入门
Linux运维
Linux系统
Linux服务器
Linux安全
Linux问答
SHELL
树莓派
正则
linux命令
安装
Linux监控
运维自动化
Ansible
Piwik
CentOS
Deepin
Ubuntu
Debian
FreeBSD
Nginx
Apache
openresty
Tengine
宝塔
SSH
页面位置:
Linuxboy
>
Linux教程
>
正文
Java教程
Java中利用动态代理,生成“空”对象的例子
文章由LinuxBoy分享于2019-03-31 09:03:14
热评(545)
Java中利用动态代理,生成“空”对象的例子
Java中利用动态代理,生成"空"对象的例子:
package
com.eric.reflect;
import
java.lang.reflect.InvocationHandler;
import
java.lang.reflect.Method;
import
java.lang.reflect.Proxy;
import
java.util.Arrays;
import
java.util.Collections;
import
java.util.List;
public
class
SnowRemovalRobot
implements
Robot {
//generate a NULL robot object
static
Robot generateNullRobotObj(Robot obj) {
return
(Robot) Proxy.newProxyInstance(Robot.
class
.getClassLoader(),
new
Class[] {Robot.
class
,Null.
class
},
new
NullRobotHandler(obj.getClass()));
}
public
static
void
main(String[] args) {
Robot.Test.test(
new
SnowRemovalRobot(
"sample "
));
System.out.println();
Robot.Test.test(generateNullRobotObj(
new
SnowRemovalRobot(
"sample "
)));
}
private
String name;
public
SnowRemovalRobot(String name) {
this
.name = name;
}
public
String name() {
return
name;
}
public
String model() {
return
"SnowBot Series 11"
;
}
public
List<Operation> operations() {
return
Arrays.asList(
new
Operation() {
public
String description() {
return
name +
" can shovel snow"
;
}
public
void
command() {
System.out.println(name +
" shoveling snow"
);
}
},
new
Operation() {
public
String description() {
return
name +
" can chip ice"
;
}
public
void
command() {
System.out.println(name +
" chipping ice"
);
}
},
new
Operation() {
public
String description() {
return
name +
" can clear the roof"
;
}
public
void
command() {
System.out.println(name +
" clearing roof"
);
}
});
}
}
// null object handler, that use dynamic proxy to generate sepcial class null object
class
NullRobotHandler
implements
InvocationHandler {
private
String name;
private
Robot nullRobot =
new
NullRobot();
public
Object invoke(Object proxy, Method method, Object[] args)
throws
Throwable {
return
method.invoke(nullRobot, args);
}
public
NullRobotHandler(Class<?
extends
Robot> type) {
name =
"NULL "
+ type.getSimpleName() +
" obj"
;
}
class
NullRobot
implements
Robot, Null {
public
String name() {
return
name;
}
public
String model() {
return
name;
}
public
List<Operation> operations() {
return
Collections.emptyList();
}
}
}
interface
Robot {
String name();
String model();
List<Operation> operations();
class
Test {
static
void
test(Robot robot) {
System.out.println(
"name"
+ robot.name());
System.out.println(
"model"
+ robot.model());
for
(Operation ope : robot.operations()) {
System.out.print(
"description:"
+ ope.description() +
" command:"
);
ope.command();
}
}
}
}
interface
Operation {
String description();
void
command();
}
/*
*
* History:
*
*
*
* $Log: $
*/
相关内容
Java实现的注册工厂模式
Java中利用反射对类的hidden成员方法和属性的访问
Java中字符串压缩的操作
用Java实现的一个简单的定时报警程序
Java动态代理简单实现
Java NIO类库Selector机制解析
Java教程:基本类型和引用类型
Java教程:实现Comparable接口
对于Java类加载过程中的顺序问题探究
排序算法(JAVA实现):冒泡排序法和插入排序法
今日最新
推荐文章:
Java实现的注册工厂模式
Java中利用反射对类的hidden成员方法和属性的
Java中字符串压缩的操作
用Java实现的一个简单的定时报警程序
Java动态代理简单实现
Java NIO类库Selector机制解析
评论暂时关闭
最新Linux教程教程
Java中利用动态代理,生成“空”
Java实现的注册工厂模式
Java中利用反射对类的hidden成员方
Java中字符串压缩的操作
用Java实现的一个简单的定时报警
Python关键语法要素笔记
Linux头条
数据激增 谁来拯救运营商网络
Hadoop-基于DistributedCache的复制联
Python简单的文件增删改查处理
Linux系统启动引导过程和服务控
Ubuntu Linux内核编译步骤
Android Zxing 添加闪光灯功能
评论暂时关闭