Java 동적 에이전트 패턴 에이전트: 역할은 특정 특정 기능을 달성하기 위한 또 다른 역할을 나타냅니다.
예를 들어, 제조업체, 중개인 및 고객 간의 관계 고객이 제품을 구매할 때 제조업체와 직접 거래하지 않으며 제품이 어떻게 생산되는지 고객은 중개인과만 거래하며 제품을 포장합니다. 일부 애프터 서비스가 제공됩니다.
에이전트 패턴에는 세 가지 역할이 있습니다. 1. 추상 주체 역할 2. 에이전트 주체 역할 3. 실제 에이전트 역할
정적 프록시의 현실을 살펴보겠습니다.
탱크를 예로 들어보겠습니다.
추상 테마 역할: 이동 가능
공개 인터페이스 이동 가능 {
무효 이동();
}
공개 클래스 TanktimeProxy는 Moveable을 구현합니다.{
개인 이동 가능 t;
공개 TanktimeProxy(이동 가능 t) {
감독자();
this.t = t;
}
@보수
공공 무효 이동() {
긴 시간1 = System.currentTimeMillis();
System.out.println("time1="+time1);
t.이동();
긴 시간2 = System.currentTimeMillis();
System.out.println("time2="+time2);
System.out.println("실행 시간:"+(time2-time1));
}
}
공개 클래스 Tank는 Moveable을 구현합니다.{
@보수
공공 무효 이동() {
System.out.println("탱크 이동.....");
}
}
공개 클래스 TestTank {
공개 정적 무효 메인(String[] args) {
탱크 t = 새로운 탱크();
이동 가능한 이동 = new TanktimeProxy(t);
move.move();
}
}
다음으로 TanK의 move() 메서드 전후에 일기를 추가하고 싶습니다.
이 기능을 구현하려면 다른 클래스를 작성해야 합니다.
공개 클래스 TanklogProxy는 Moveable을 구현합니다.{
개인 이동 가능 t;
공개 TanklogProxy(이동 가능 t) {
감독자();
this.t = t;
}
@보수
공공 무효 이동() {
System.out.println("이동 시작.....");
t.이동();
System.out.println("이동 종료......");
}
}
공개 클래스 TestTank {
공개 정적 무효 메인(String[] args) {
탱크 t = 새로운 탱크();
이동 가능한 이동 = new TanktimeProxy(t);
이동 가능한 movet = new TanklogProxy(move);
movet.move();
}
}
Tank의 move() 메소드가 호출되기 전과 후에 더 많은 기능을 추가하려면 에이전트 테마 역할을 더 작성해야 합니까? 이렇게 하면 코드가 너무 두꺼워지고 유지 관리가 어려워지나요? 대답은 '예'입니다. 모든 프록시 개체를 프록시하기 위해 에이전트 테마 역할을 동적으로 생성할 수 있습니다.
기사 마지막 부분에서는 IBM과 Boeing 777과 같은 프로그래머들의 농담 인용문을 여러분과 공유하고 싶습니다.
보잉 777은 IBM이 전적으로 제공한 장비를 사용하여 전적으로 컴퓨터 가상 현실에서 설계 및 제조된 최초의 항공기입니다. 시험비행에 앞서 보잉 사장은 IBM 기술이사를 시험비행에 참여시켜달라고 열성적으로 초청했지만 감독관은 "아, 정말 영광인데 그날이 내 아내 생일이어서…"라고 말했다.
보잉 CEO는 "겁쟁이야, 아직 시험비행 날짜를 말하지 않았어!"라는 말을 듣고 화를 냈다.