에이전트 모드 설명
참고 : 이름에서 알 수 있듯이 한 클래스를 사용하여 다른 클래스를 대체하여 메소드 기능을 수행하는 것이 좋습니다. 이 패턴은 장식 모드와 약간 유사합니다. 차이점은 프록시 모드가 클라이언트를 대체하여 프록시 객체 클래스를 초기화하는 반면, 장식 모드는 인터페이스 또는 초기 데코레이터의 매개 변수에 대한 참조에 의해 실행된다는 것입니다.
동적 객체 지향 언어에서 프록시 모드는 프록시 클래스를 제어하고 수정하는 역할을하며 프록시 클래스에 대해 완전히 숨겨지고 보호 된 역할을 수행합니다. 프록시 클래스는 간접적으로 초기화되며 필요할 때만 호출됩니다.
장면 설명 :
집을 임대하는 매우 일반적인 예. 임차인은 집을 빌리기를 원하고 집주인은 집을 임대하기를 원하지만 임차인이나 집주인은 집을 찾거나 집에서 집을 볼 때까지 기다릴 시간이 많지 않아 부동산 중개인을 찾아갑니다. 집주인은 임대 및 판매를 위해 대행사에게 방을 위탁합니다. 적절한 사람이있을 때, 대리인은 방을 가져 가서 그것을보고 돈을 지불하여 임대인이 방을 임대 할 것입니다. 임차인은 집을 기관에 위탁하여 기관이 요구하는 객실 위치를 돕습니다. 에이전트가 임차인을 찾은 후, 두 사람은 임대료를 지불하여 임차인이 자신이 사는 곳으로 임대 할 수 있도록 돈을 지불합니다.
인스턴스 소스 코드
위의 예를 따르려면;
1. 집주인 임대 범주;
코드 사본은 다음과 같습니다.
함수 fangdong () {
this.room = '방 이름';
}
fangdong.prototype.chuzu = function () {
Console.log ( '지주 임대료 실 :' + this.room);
}
2. 중개 에이전트 클래스 :
코드 사본은 다음과 같습니다.
함수 proxy () {
this.fangdong = 새로운 fangdong ();
}
proxy.prototype.chuzu = function () {
this.fangdong.chuzu ();
Console.log ( '임대 후 대행사 수수료');
}
3. 사용 방법 :
코드 사본은 다음과 같습니다.
// 임차인은 대리인에게 집을 찾는 데 도움을 요청합니다.
var proxy = 새로운 프록시 ();
proxy.chuzu ();
위의 사용법을보십시오. 프록시 클래스는 클라이언트 측에서 전혀 사용할 수 없습니다. 특정 비즈니스 로직 프로세스를 보호 해야하는 시나리오에서 잘 사용할 수있는 프록시 클래스를 사용하십시오. 프록시 모드 사용은 보호되어야하는 프록시 클래스에서 잘 사용할 수 있습니다.
다른 지침
데코레이터 모드와 마찬가지로 프록시 모드는 확장 및 폐쇄 수정에 대한 개방성에 대한 객체 지향적 사고의 원리를 잘 반영합니다.
프록시 모드, 인터페이스 또는 초록 클래스를 사용하여 공통 인터페이스를 조절할 수 있습니다. (다음은 Java 프록시 모드를 제공합니다)
1. 추상 수업 초록 방법;
코드 사본은 다음과 같습니다.
공개 초록 클래스 하우스 {
공개 무효 추상 추스 ();
}
공개 클래스 Fangdong Extends House {
개인 문자열 실 = "방 이름";
@보수
공개 void chuzu () {
System.out.println (방);
}
}
공개 클래스 프록시는 집 {
개인 Fangdong Fangdong;
public proxy () {
this.fangdong = New Hangdong ();
}
@보수
공개 void chuzu () {
this.fandong.chuzu ();
System.out.println ( "임대 후 지불 대행사 수수료");
}
}
//사용
하우스 하우스 = 새로운 프록시 ();
house.chuzu ();
2. 인터페이스 방법 :
코드 사본은 다음과 같습니다.
인터페이스 하우스 {
공공 void chuzu ();
}
공개 클래스 Fangdong Ampess House {
개인 문자열 실 = "방 이름";
@보수
공개 void chuzu () {
System.out.println (방);
}
}
공개 클래스 프록시는 집 {
개인 Fangdong Fangdong;
public proxy () {
this.fangdong = New Hangdong ();
}
@보수
공개 void chuzu () {
this.fandong.chuzu ();
System.out.println ( "임대 후 지불 대행사 수수료");
}
}
//사용
하우스 하우스 = 새로운 프록시 ();
house.chuzu ();