프록시 모드의 역할은 다른 개체에 대한 프록시를 제공하여 이 개체에 대한 액세스를 제어하는 것입니다.
클라이언트가 다른 개체를 직접 참조하는 것을 원하지 않거나 직접 참조할 수 없는 경우가 있으며, 프록시 개체는 클라이언트와 대상 개체 사이의 중개자 역할을 할 수 있습니다.
추상 역할: 실제 개체와 프록시 개체 간의 공통 인터페이스를 선언합니다.
프록시 역할: 프록시 개체 역할에는 실제 개체에 대한 참조가 내부적으로 포함되어 있어 실제 개체를 조작할 수 있는 동시에 프록시 개체는 대체할 수 있도록 실제 개체와 동일한 인터페이스를 제공합니다. 언제든지 실제 개체. 동시에 프록시 개체는 실제 개체에 대한 작업을 수행할 때 다른 작업을 추가할 수 있으며 이는 실제 개체를 캡슐화하는 것과 같습니다.
실제 역할: 프록시 역할이 나타내는 실제 개체는 우리가 궁극적으로 참조하려는 개체입니다.
그림: 다음 프로그램은 정적 프록시를 사용하여 대문자 변환 기능을 구현합니다.
인터페이스 클래스 ISomeService:
package com.ietree.basicskill.designpattern.staticproxy;/** * 接口类 * * @author Root */public interface ISomeService { String doFirst(); void doSecond(); }
구현 클래스 SomeServiceImpl:
package com.ietree.basicskill.designpattern.staticproxy;/** * 实现类 * * @author Root */public class SomeServiceImpl implements ISomeService { @Overridepublic String doFirst() { System.out.println("执行doFirst()..."); String result = "abcde";return result; } @Overridepublic void doSecond() { System.out.println("执行doSecond()..."); } }
Proxy 클래스 SomeServiceProxy:
SomeServiceProxy =
테스트 클래스 Main:
package com.ietree.basicskill.designpattern.staticproxy;public class Main {public static void main(String[] args) { ISomeService service = new SomeServiceProxy();String result = service.doFirst(); System.out.println(result); service.doSecond(); } }
위 내용을 따르고 싶다면 메소드(정적 프록시) 프록시 패턴을 사용하면 실제 역할이 이미 프록시 객체의 내부 속성으로 구현되어야 합니다.
그러나 실제 사용에서는 실제 역할이 대리 역할에 상응해야 하지만, 대량으로 사용될 경우 클래스의 급격한 확장으로 이어질 것입니다. 또한 실제 역할이 사전에 알려지지 않은 경우; 프록시를 사용하시겠습니까? 이 문제는 Java의 동적 프록시 클래스로 해결할 수 있습니다.
위 내용은 디자인 패턴에서 프록시 패턴의 역할의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!