Java 상용 디자인 모드 -- 프 록 시 모드 (프 록 시 패턴)
4048 단어 디자인 모드
에이전트 모드 의 역할
예 를 들 어:
당신 은 밀 크 티 를 마시고 싶 지만, 당신 은 스스로 밀 크 티 가게 에 가서 사고 싶 지 않 고, 배달 작은 형 을 찾 아 보 내 는 것 이 바로 대리 모델 입 니 다.
정적 에이전트
package com.example.proxy;
/**
*
*/
public interface BuyMilkyTea {
void buyMilkyTea();
}
package com.example.proxy;
/**
*
*/
public class MyPeople implements BuyMilkyTea {
@Override
public void buyMilkyTea() {
System.out.println(" ");
}
}
package com.example.proxy;
/**
*
*/
public class TakeOutPeople implements BuyMilkyTea {
private BuyMilkyTea buyMilkyTea;
public TakeOutPeople(BuyMilkyTea buyMilkyTea) {
this.buyMilkyTea = buyMilkyTea;
}
@Override
public void buyMilkyTea() {
System.out.println(" , ");
buyMilkyTea.buyMilkyTea();
System.out.println(" , ");
}
}
package com.example.proxy;
public class Test {
public static void main(String[] args) {
MyPeople myPeople = new MyPeople();
TakeOutPeople takeOutPeople = new TakeOutPeople(myPeople);
takeOutPeople.buyMilkyTea();
}
}
단점: 대리 류 와 의뢰 류 는 같은 인 터 페 이 스 를 실현 하 는 동시에 같은 방법 을 실현 해 야 한다.이렇게 해서 대량의 코드 가 중복 되 었 다.인터페이스 에 하나의 방법 이 추가 되면 모든 실현 류 가 이 방법 을 실현 해 야 하 는 것 을 제외 하고 모든 대리 류 도 이 방법 을 실현 해 야 한다.코드 유지보수 의 복잡 도 를 증가 시 켰 다.
동적 에이전트
동적 대 리 는 정적 에이전트 와 달리 에이전트 의 대상 에 따라 동적 으로 프 록 시 클래스 를 만 듭 니 다.이렇게 하면 정적 에이전트 에서 에이전트 인터페이스 가 너무 많은 문 제 를 피 할 수 있다.동적 대 리 는 실현 방식 으로 반 사 를 통 해 이 루어 지 며 자바 자체 테이프
java.lang.reflect.Proxy
를 통 해 고정된 규칙 을 통 해 생 성 된다.그 절 차 는 다음 과 같다.InvocationHandler
인 터 페 이 스 를 실현 하 며 이 invoke
방법 package com.example.dynamicproxy;
/**
*
*/
public interface BuyMilkyTea {
void buyMilkyTea();
}
package com.example.dynamicproxy;
/**
*
*/
public class MyPeople implements BuyMilkyTea {
@Override
public void buyMilkyTea() {
System.out.println(" ");
}
}
package com.example.dynamicproxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
*
*/
public class DynamicTakeOutPeople implements InvocationHandler {
private Object object;
public DynamicTakeOutPeople(Object object) {
this.object = object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object invoke = method.invoke(object, args);
return invoke;
}
}
package com.example.dynamicproxy;
import java.lang.reflect.Proxy;
public class Test {
public static void main(String[] args) {
MyPeople myPeople = new MyPeople();
DynamicTakeOutPeople dynamicTakeOutPeople = new DynamicTakeOutPeople(myPeople);
ClassLoader classLoader = dynamicTakeOutPeople.getClass().getClassLoader();
BuyMilkyTea buyMilkyTea = (BuyMilkyTea)Proxy.newProxyInstance(classLoader, new Class[]{BuyMilkyTea.class}, dynamicTakeOutPeople);
buyMilkyTea.buyMilkyTea();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.