한 걸음 한 걸음 디자인 모델 - 대리 모델
15721 단어 디자인 모드
1. 생활 실례
매년 설 이 다가 올 때 면 표를 빼 앗 는 것 은 매우 힘 든 임무 이다.인터넷 기술 과 인터넷 티켓 팅 이 아직 특별히 성숙 하지 않 았 을 때, 모두 매표소 에서 줄 을 서서 표를 사 야 한다.많은 학교 에 다 니 는 학생 들 이 매 표 하 자마자 줄 을 서서 표를 기다 릴 시간 이 없어 대신 줄 을 서 는 황소 가 나 타 났 다. 이들 은 매번 학생 들 의 25% 를 더 받 고 대신 줄 을 서서 표를 샀 다.
우리 대리 모델 의 개념 을 다시 생각해 보면 위의 예 에서 전형 적 인 대리 모델 이 존재 한다.대리 모드 의 목적 은 다른 대상 (학생) 에 게 대리 (황소) 를 제공 하여 이 대상 (기차표) 에 대한 방문 을 통제 하 는 것 이다.
아래 에서 우 리 는 위의 이 생활 실례 를 코드 로 바 꿀 것 이다.
2. 라 이 프 인 스 턴 스 코드
package com.wxueyuan.DesignPettern.StaticProxy;
/**
* Author: Jesmin
* Description:
*
*/
public class Ticket {
private double price;
public Ticket(double price) {
this.price = price;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
package com.wxueyuan.DesignPettern.StaticProxy;
/**
* Author: Jesmin
* Description: , Operation , buyTicket
*
*
*/
public interface Operation {
void buyTicket(Ticket t);
}
package com.wxueyuan.DesignPettern.StaticProxy;
/**
* Author: Jesmin
* Description: “ ” , , 4 , , , ,
*
*/
public class Scalper implements Operation{
private Student realConsumer;
public Scalper(Student s) {
realConsumer = s;
}
@Override
public void buyTicket(Ticket t) {
// TODO Auto-generated method stub
System.out.println(" ");
System.out.println(" ");
realConsumer.buyTicket(t);
System.out.println(" ");
}
}
package com.wxueyuan.DesignPettern.StaticProxy;
public class TicketConsumer implements Operation{
@Override
public void Student(Ticket t) {
// TODO Auto-generated method stub
System.out.println(" , "+t.getPrice());
}
}
package com.wxueyuan.DesignPettern.StaticProxy;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
// ticket
Ticket t = new Ticket(200);
//
Scalper scalper = new Scalper(new Student());
//
scalper.buyTicket(t);
}
}
집행 결 과 는 황소 가 표를 사 는 사람의 돈 을 받 고 황 소 는 밤새 줄 을 서서 표를 사 는 사람 에 게 표 한 장 을 샀 으 며, 표 값 은 200.0 황소 가 학생 들 에 게 표를 건 네 주 었 다.
위의 코드 를 분석 해 보면 황소 실체 류 에서 구 매 자의 사례 를 얻 었 기 때문에 그 는 그의 구 매 조작 에서 구 매 자의 구 매 조작 과 추가 적 인 조작 을 수행 할 수 있다.
다음은 대리 모델 에서 어떤 역할 이 있 는 지 분석 해 보 겠 습 니 다.
3. 프 록 시 모드 의 장단 점
package com.wxueyuan.DesignPettern.StaticProxy;
/**
* Author: Jesmin
* Description: , , 4 , , , ,
*
*/
public class TeacherScalper implements Operation{
private Teacher realConsumer ;
public TeacherScalper(Teacher t) {
realConsumer = t;
}
@Override
public void buyTicket(Ticket t) {
// TODO Auto-generated method stub
System.out.println(" ");
System.out.println(" ");
realConsumer.buyTicket(t);
System.out.println(" ");
}
}
package com.wxueyuan.DesignPettern.StaticProxy;
public class Teacher implements Operation{
@Override
public void buyTicket(Ticket t) {
// TODO Auto-generated method stub
System.out.println(" , "+t.getPrice());
}
}
package com.wxueyuan.DesignPettern.StaticProxy;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
// ticket
Ticket t = new Ticket(200);
//
Scalper scalper = new Scalper(new Student());
//
scalper.buyTicket(t);
// ticket
Ticket adultTicket = new Ticket(300);
//
TeacherScalper ts = new TeacherScalper(new Teacher());
//
ts.buyTicket(adultTicket);
}
}
이러한 대리 모델 로 인해 대리 역할 과 위탁 역할 의 공 통 된 행위 인 터 페 이 스 를 미리 추상 화 했 고 대리 역할 은 컴 파일 할 때 위탁 류 와 의 위탁 관 계 를 확 정 했 기 때문에 이런 대리 모델 도 정태 대리 라 고 불 린 다.
여러 개의 위탁 유형 이 있 을 때 여러 개의 대리 류 가 필요 한 상황 을 고려 하면 우 리 는 당연히 더 좋 은 방법 이 있 는 지, 하나의 대리 류 를 통 해 모든 대리 기능 을 완성 할 수 있 는 지 생각 할 것 이다.답 은 있 습 니 다. 그것 이 바로 동적 대리 입 니 다.
4. 동적 에이전트
정적 에이전트 에서 하나의 대 리 는 하나의 유형 만 대리 할 수 있 고 컴 파일 기간 에 대리 대상 이 확정 되 었 습 니 다.한편, 동적 대 리 는 실 행 될 때 반사 체 제 를 통 해 동적 대 리 를 실현 하고 각종 유형의 대상 을 대리 할 수 있다.
다음 에 우 리 는 위의 선생님, 학생 들 이 기차 표를 사 는 것 을 예 로 들 어 동태 대 리 를 이용 하여 이 예 를 완성 한다. 다음 예 에서 사용 한 Ticket 실체 류, Teacher 실체 류, Student 실체 류 와 Operation 추상 인 터 페 이 스 는 모두 정태 대리 중의 것 과 같 기 때문에 더 이상 언급 하지 않 는 다.
package com.wxueyuan.DesignPettern.DynamicProxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class TicketOperationInvocationHandler implements InvocationHandler {
// Handler
private Object target;
public TicketOperationInvocationHandler(Object target) {
this.target = target;
}
//
public Object getProxy() {
return Proxy.newProxyInstance(Thread.currentThread()
.getContextClassLoader(), target.getClass().getInterfaces(),
this);
}
//
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// TODO Auto-generated method stub
System.out.println(" ");
System.out.println(" ");
Object ret = method.invoke(target, args);
System.out.println(" ");
return ret;
}
}
package com.wxueyuan.DesignPettern.DynamicProxy;
import com.wxueyuan.DesignPettern.StaticProxy.Operation;
import com.wxueyuan.DesignPettern.StaticProxy.Student;
import com.wxueyuan.DesignPettern.StaticProxy.Teacher;
import com.wxueyuan.DesignPettern.StaticProxy.Ticket;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
// ticket
Ticket studentTicket = new Ticket(200);
// ticket
Ticket adultTicket = new Ticket(300);
//
Operation studentProxy = (Operation) new TicketOperationInvocationHandler(new Student()).getProxy();
studentProxy.buyTicket(studentTicket);
System.out.println("---------------------------");
//
Operation teacherProxy = (Operation) new TicketOperationInvocationHandler(new Teacher()).getProxy();
teacherProxy.buyTicket(adultTicket);
}
}
실행 결 과 는:
황 소 는 표를 사 는 사람의 돈 을 받 고 황 소 는 밤새 줄 을 서서 학생 들 에 게 표를 한 장 샀 으 며, 표 값 은 200.0 황소 로 표를 사 는 사람 에 게 건 네 주 었 다.
황 소 는 표를 사 는 사람의 돈 을 받 고 황 소 는 밤새 줄 을 서서 선생님 에 게 표를 한 장 샀 는데, 표 값 은 300.0 황소 가 표를 사 는 사람 에 게 건 네 주 었 다.
이제 동적 에이전트 의 장점 을 분석 해 보 자. 1. 정적 에이전트 에 비해 우 리 는 대리 가 필요 한 모든 의뢰 류 에 대응 하 는 대리 류 (상례 의 TeacherScalper 와 Scalper) 를 만 들 필요 가 없다. 우 리 는 추상 적 인 인터페이스 로 대리 인 스 턴 스 를 생 성하 여 서로 다른 의뢰 류 를 대체 하여 임 무 를 완성 할 수 있다.2. 동적 에이전트 의 또 다른 장점 은 공공 인터페이스 에서 설명 한 모든 방법 을 하나의 집중 적 인 방법 으로 옮 겨 처리 하 는 것 이다 (invocke () 방법). 즉, 우 리 는 invoke 방법 에서 모든 인터페이스 에서 의 방법 에 똑 같은 추가 작업 을 추가 할 수 있다. 예 를 들 어 방법 이 실행 되 기 전에 현재 시간 을 기록 하고 방법 이 실 행 된 후에 현재 시간 을 기록 하 는 것 과 같다.차이 로 모든 방법의 실제 실행 시간 을 얻 는 등 이것 이 바로 AOP (절단면 프로 그래 밍) 의 기본 원리 이다.
여기 서 블 로 거들 은 여러분 에 게 대리 디자인 모델 과 정태 대리 와 동태 대리 간 의 장단 점 을 소개 합 니 다. 어떤 학생 들 은 동태 대리 의 사용 과 원리 에 대해 곤 혹 스 러 울 수 있 습 니 다. 블 로 거들 의 또 다른 글 인 에 관심 을 가 져 주 십시오.
이 절 블 로그 의 원본 코드 는 모두 여기에 놓 여 있 습 니 다. 다운로드 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.