프 록 시 모드(Java)
정적 에이전트
레코드 코드 실행 시간
/*
*
*/
class Logger {
public static void record(long startTime, long endTime){
System.out.println(" "+ (endTime - startTime) + " ");
}
}
interface IUserService {
void add();
}
class UserServiceImpl implements IUserService {
@Override
public void add() {
try {
// ,
Thread.sleep((long) (Math.random() * 1000));
System.out.println(" ");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class UserServiceProxy implements IUserService {
private IUserService userService;
public UserServiceProxy(IUserService userService) {
this.userService = userService;
}
@Override
public void add() {
long startTime = System.currentTimeMillis();
userService.add();
long endTime = System.currentTimeMillis();
Logger.record(startTime, endTime);
}
}
class UserServiceProxyTest {
public static void main(String[] args) {
IUserService userService = new UserServiceProxy(new UserServiceImpl());
userService.add();
}
}
:
601
정적 프 록 시 는 비교적 간단 하지만 문제 가 존재 합 니 다.만약 에 우리 가 100 개의 클래스 가 실행 시간 을 기록 하려 면 100 개의 프 록 시 클래스 를 만들어 야 합 니 다.유지 비용 이 너무 높 고 모든 프 록 시 클래스 의 코드 논 리 는 똑 같 습 니 다.그럼 어떻게 해결 하고 문 제 를 찾 아야 하나 요?우 리 는 동적 대 리 를 사용 하여 해결 할 수 있 습 니 다.다음은 자바 가 제공 하 는 동적 대리 의 용법 을 먼저 보 겠 습 니 다.
JDK 동적 에이전트
/*
*
*/
class Logger implements InvocationHandler {
private Object proxyObject;
/*
*
*/
public Object createProxy(Object proxyObject){
this.proxyObject = proxyObject;
Class> clazz = proxyObject.getClass();
return Proxy.newProxyInstance(clazz.getClassLoader(), clazz.getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
long startTime = System.currentTimeMillis();
Object obj = method.invoke(proxyObject, args);
long endTime = System.currentTimeMillis();
System.out.println(" "+ (endTime - startTime) + " ");
return obj;
}
}
interface IUserService {
void add();
}
class UserServiceImpl implements IUserService {
@Override
public void add() {
try {
// ,
Thread.sleep((long) (Math.random() * 1000));
System.out.println(" ");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class UserServiceProxyTest {
public static void main(String[] args) {
Logger logger = new Logger();
UserServiceImpl userService = new UserServiceImpl();
IUserService userServiceProxy = (IUserService)logger.createProxy(userService);
userServiceProxy.add();
}
}
:
166
JDK 동적 프 록 시 를 사용 하면 실행 시간 을 기록 해 야 하 는 모든 클래스 에 프 록 시 클래스 를 만 들 필요 가 없습니다.자바 는 동적 으로 대응 하 는 프 록 시 클래스 를 만 들 것 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.