2011-04-11 2 views
0

나는 사용자 목록을 표시하는 표시 객체를 가지고 있으며 그 목록에 대한 작업을위한 메뉴를 제공합니다 - 새 사용자 추가, 그룹에 추가, 삭제 등. 현재 디스플레이는 자체 메뉴를 구성하므로 추가 할 수 있습니다 메뉴 명령은 doCreateNewUsers()입니다. 불행히도, 이는 디스플레이의 모든 인스턴스가 항상 "새로 만들기"옵션을 가지고 있음을 의미합니다.일반 디스플레이에서 명령을 구성하는 데 도움이되는 디자인 패턴이 있습니까?

"사용자"탭에서 "새로 만들기"옵션을 포함해야하며 "그룹"탭에서 그렇지 않아야합니다. 첫 번째 생각은 메뉴를 외부화하여 다른 방식으로 구성 할 수있게하는 것이 었습니다. 문제는 그 때 개인 전화 doCreateNewUsers() 기능을 잃는 것입니다!

이 상황에 맞는 디자인 패턴이 있습니까? doCreateNewUsers을 외부 클래스에 의해 트리거되어서는 안되는 대화 상자를 보여주기 때문에 공용으로 만드는 아이디어가 마음에 들지 않습니다. 나는 익명의 서브 클래스에서 메뉴를 정의 할 수 있도록 디스플레이를 추상화 할 수 있었지만 지금 당장 위젯을 재사용하는 방식이 엉망이되었습니다. 디스플레이가 생성되고 초기화 된 후에 메뉴를 구성하고 싶습니다. 이 문제를 다루는 업계 표준 방식이 있기를 바라고 있습니다.

+0

몇 가지 코드를 게시 할 수 있습니까? –

답변

1

디스플레이는 메뉴 항목과 관련된 명령에 해당 작업을 캡슐화 할 수있는 경우에만 해당 메뉴를 구성 할 수 있습니다. 일단 그렇게 설정하면 메뉴에서 항목을 추가 및 제거 할 수 있으며 작업을 담당하는 명령에 액세스 할 수 있으므로 개인 메서드에 액세스 할 필요가 없습니다.

나는 command pattern이 당신의 친구라고 생각합니다.

일단 명령 개체가 있으면 메뉴 항목을 만들고 실제 명령을 실행하는 방법을 제공하기 위해 명령 개체를 사용할 수 있습니다.

User 개체 목록을 추가하는 경우 명령 개체를 전달하는 것이 더 적합 할 수 있습니다. 사용자 컬렉션을 나타내는 객체를 전달하는 경우 명령 객체를 노출하는 메소드를 추가하는 것이 좋습니다. 명령이 수 후

public ICommandProvider 
{ 
    ICollection<ICommand> GetCommands(); 
} 

:이 경우 당신은 아마 당신의 객체가 같은 명령 개체에 대한 액세스, 뭔가 제공하는 인터페이스를 구현해야 객체를 갖는

public ICommand 
{ 
    String GetMenuText(); 
    void Execute(); 
} 

을 그 명령 반환에 대한 책임이 표시되면 명령을 쉽게 표시 할 수 있으므로 명령을 수정할 수 있습니다 (예 : 요소 추가 또는 요소 제거).
분명히 정확한 세부 정보는 상황에 따라 다르지만 그와 같은 것은 디스플레이의 메뉴 옵션을 구성하지 않고도 수행중인 세부 사항을 알 필요가 있어야합니다. 명령 후 디스플레이를 새로 고침해야 할 것입니다.

+0

자세한 답변을 보내 주셔서 감사합니다. 문제는'Execute()'내부에서 디스플레이의 private 메소드에 접근하기를 원하고,'ICommand'는 그것에 접근 할 수 없다는 것입니다. –

+0

@Riley 왜 private 메소드의 내용을'Execute()'메소드에 넣지 않습니까? 여러 명령 사이에서 공유하려면 기본 클래스를 공유하거나 다른 클래스에 메소드를 넣고 명령 인스턴스에 해당 클래스의 인스턴스를 지정하십시오.명령에 액션을 캡슐화하면 실행 취소/다시 실행 (대기열에 명령에 실행 취소를 추가)하거나 명령을 실행하는 여러 가지 방법 (예 : 메뉴뿐만 아니라 툴바 버튼)도 가질 수 있습니다. –

+0

사적인 방법에 대해 당신이 그것에 접근해야한다는 것을 의미하는 것은 무엇입니까? –

관련 문제