나는 내 대학과 비슷한 재미있는 일을하고있다. 예를 들어 ClassA가 있습니다. 나는 일요일에 클라이언트가 ClassA 객체를 만들거나 기존 ClassA 객체를 사용할 수없는 객체에 대한 액세스를 제한해야합니다. ClassA의 각 메소드에서 조건을 검사해야하기 때문에 클래스 래퍼를 만들어야한다고 생각합니다. 거기에 어떤 패턴이 있습니까? 제발, 당신이 나를 도울 수 있기를 바랍니다.개체에 대한 액세스를 제한하는 방법은 무엇입니까?
답변
공장 패턴이 당신이 찾고있는 것입니다. 인수를 팩토리 클래스 ("래퍼")에 전달하면 올바른 종류의 객체를 생성 할 수 있습니다. 예를 들면 : 당신은 기존의를 ClassA가 너무 개체를 사용할 수있는 클라이언트를 원하기 때문에
이MyFactory factory = new MyFactory();
MyInterface object = factory.create(dayOfTheWeek);
...
좋아요, ClassA의 객체를 만드는 것이 좋습니다. 그러나 오늘 일요일이면 모든 기존 객체가 작동하지 않습니다. 즉, 클라이언트가 obj.add(), obj.remove() 등을 실행할 수 없습니다. – user1166635
"작동하지 않음"이란 무엇을 의미합니까? 아무것도하지 마세요? 예외를 던지시겠습니까? ClassB를 구현해 무조건 모든 호출에서'IllegalStateException'을 throw 할 수 있습니다. 또는 ClassA에 isAvailable() 메소드를 추가하고 추가 또는 제거를 호출해야 할 때마다 쿼리 할 수 있습니다. 이것은 훨씬 더 좋을 것입니다. –
, 그것은 아마도 일종의 도움이 될 : 새 객체를 필요로 할 때
class ClassA implements MyInterface { ... }
class ClassB implements MyInterface { ... }
class MyFactory {
public MyInterface create(int dayOfTheWeek) {
if (dayOfTheWeek == 0) {
return new ClassA();
} else {
return new ClassB();
}
}
}
는 MyFactory는 실제 클래스를 결정한다 동적 프록시 여기서 대략적인 코드는 다음과 같습니다.
public class MasterControl {
public static boolean check(Method m){
//do controls on the current day
//return true/false accordingly
}
}
public class ProxyFactory {
public static ClassAInterface getListProxy(final ClassA cp){
return (ClassAInterface) Proxy.newProxyInstance(cp.getClass().getClassLoader(), new Class[] {ClassAInterface.class},new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if(MasterControl.check(method,args[0]))
return method.invoke(cp, args);
else
return (ClassAInterface) null;
}
});
}
}
좋아, 나는 저자의 의견을 첫 번째 대답으로 읽었다. 어쩌면 그건 틀린 것이 아닙니다. Sry, 일반 공장에서 시작되었습니다. –
- 1. 자바 스크립트 개체에 대한 액세스를 제한하는 방법은 무엇입니까?
- 2. FTP 폴더에 대한 액세스를 제한하는 방법은 무엇입니까?
- 3. 사용자의 액세스를 제한하는 방법은 무엇입니까?
- 4. 액티브 레코드 개체에 대한 액세스를 어떻게 인증해야합니까?
- 5. HTTP 액세스를 비디오 파일로 제한하는 방법은 무엇입니까?
- 6. 실버 라이트 지원 데이터 서비스에 대한 액세스를 제한하는 방법은 무엇입니까?
- 7. 개발 웹 사이트에 대한 액세스를 제한하는 가장 좋은 방법은 무엇입니까?
- 8. wsdl을 제외한 모든 것에 대한 액세스를 제한하는 방법은 무엇입니까?
- 9. 내 jsonifier에 대한 액세스를 제한하는 가장 쉬운 방법은 무엇입니까?
- 10. aix에서 폴더에 대한 루트 액세스를 제한하는 방법은 무엇입니까?
- 11. C#을 사용하여 USB 드라이브에 대한 액세스를 제한하는 방법은 무엇입니까?
- 12. ActiveMQ의 JMX API에 대한 액세스를 localhost/intranet으로 제한하는 방법은 무엇입니까?
- 13. 내 웹 서비스에 대한 액세스를 제한하는 방법은 무엇입니까?
- 14. 웹 시스템에서 시스템 그룹에 대한 액세스를 제한하는 접근 방법은 무엇입니까?
- 15. 기본 클래스의 일부에 대한 액세스를 제한하는 방법은 무엇입니까?
- 16. 다른 클래스에서 mysql 연결에 대한 액세스를 제한하는 방법은 무엇입니까?
- 17. Amazon S3 API 액세스를 제한하는 방법은 무엇입니까?
- 18. 사용자 액세스를 제한하는 프로그램
- 19. 페이지 액세스를 localhost로만 제한하는 방법?
- 20. 사용자가 웹 페이지에 대한 액세스를 제한하는 방법
- 21. 측정 그룹에 대한 액세스를 제한하는 MDX 식
- 22. phpbb - 게시판 인덱스에 대한 액세스를 제한하는 방법
- 23. 하위 도메인에 대한 사용자 액세스를 제한하는 방법
- 24. MVC에서 특정 파일에 대한 액세스를 제한하는 방법
- 25. django에서 특정 행에 대한 액세스를 제한하는 방법
- 26. 이미지에 대한 액세스를 제한하는 가장 좋은 방법은 ... 맞나요?
- 27. ClearCase (Windows Server)에서 VOB 읽기 액세스를 제한하는 방법은 무엇입니까?
- 28. asp.net에서 페이지의 액세스를 제한하는 역할을 설정하는 방법은 무엇입니까?
- 29. Drupal 7 : 특정 사용자 역할에 대한 파일 액세스를 제한하는 방법
- 30. django에서 다른 사용자의 개체에 대한 액세스를 금지하는 가장 좋은 방법입니다.
* "내 대학과 비슷한 재미있는 일이 있습니다."* 1) "재미"라는 이상한 아이디어가 있습니다. 2) 과제 질문에 [tag : 숙제] 태그를 추가하는 것을 잊지 마십시오. –
죄송합니다, 감사합니다. – user1166635