2009-04-14 5 views
5

우리의 코드베이스는 모두 하나의 메소드와 인터페이스가있는 반복 된 패턴을 가지고 있습니다. 이게 진짜 디자인 패턴인가요? 그렇다면 무엇이며 혜택은 무엇입니까?디자인 패턴입니까?

public interface IRunnable 
    {  
     void Run();  
    } 

    public interface IAction 
    { 
     void Perform(); 
    } 

    public interface ICommand 
    { 
     void Execute(ActionArgs _actionargs); 
    } 

답변

5

나는 Command pattern로 참조 본 적이 : 여기

은 몇 가지 예입니다.

나는 Bob에 대해서 삼촌이 Agile Principles, Patterns, and Practices in C#을 읽는 것에 대해 처음 알게되었습니다.

나는 그 우아함이 단순함을 믿습니다. 나는 파일 처리 서비스를 작성할 때 그것을 사용했다. 이 서비스는 파일 읽기/삭제 관리를 모두 수행했습니다. 파일을 처리해야 할 때마다 해당 플러그인이로드되었습니다. 각 플러그인은 Process 메소드를 구현했으며 해당 유형의 파일을 처리하는 데 필요한 모든 작업을 수행했습니다. (주로 내용을 구문 분석하고 데이터베이스에 삽입하십시오.)

새 레이아웃으로 새 파일 유형을 처리해야 할 때마다 Process을 구현 한 새 플러그인을 작성해야했습니다.

간단한 해결책이 필요했기 때문에 이것은 효과가있었습니다. 하나 이상의 매개 변수를 가져와야하는 경우이 매개 변수는 사용할 패턴이 아닙니다.

2

이러한 내용은 사용 방법 및 컨텍스트에 따라 Command Pattern의 특정 사례가 될 수 있습니다. 이것의 일부는 왜 그리고 어떻게 설정하는지에 달려 있습니다.

명령 패턴에는 일반적으로 상태 및 다양한 개체의 개념이 포함됩니다. 일반적으로이 유형의 인터페이스는 이것이 내가 생각하기에 여기에 디자인 패턴으로 생각하고있는 것이지만 호출자 또는 여러 대상이 없으면 이것이 고전적인 예인지 아닌지를 판단하기가 어렵습니다. ..

그러나, 이것 자체는 기본 인터페이스 추상화로, 디자인 패턴으로 분류 할 수있는 것이 아닙니다.

1

제공 한 인터페이스가 일반적으로 경험있는 문제에 대한 솔루션을 제공하지 않고 개발중인 프로젝트의 매우 구체적인 문제에 대한 솔루션을 제공하기 때문에 디자인 패턴이라고 부를 수 있는지 확신 할 수 없습니다.

인터페이스를 제대로 사용하는 이유는 이러한 메서드가 필요한 모든 클래스를 포함 할 수 없기 때문입니다. 그렇지만 특정 클래스가이를 구현한다는 것을 알아야합니다. 이전 포스터 중 일부는 제안

이 될 수 있습니다 당신은 람다 표현식을 사용하여이 반복을 제거 (또는 미래의 코드를 방지) 할 수 http://en.wikipedia.org/wiki/Command_pattern

1

. 람다 표현식은이 상황을 정확하게 나타냅니다.

1

아무튼, 그때 그것은 functor입니다. 스레드의 주 기능과 같이 함수 (포인터)가 사용되는 일종의 함수에 대한 최상위 함수 (포인터)가없는 언어에서 사용됩니다.

1

인터페이스에는 하나의 메소드 만있는 응용 프로그램이 있습니다. 내 말은, .NET에는 (PropertyChanged 이벤트) INotifyPropertyChanged가 많이 있습니다. 객체가 실제로 어떤 유형의 객체인지에 관계없이 특정 메소드를 보장하므로 유형에 관계없이 다시 호출 할 수 있습니다.

Dim runnableObjects As List(Of Object) 
runnableObjects.Add(New MyRunnableObject1) 
runnableObjects.Add(New MyRunnableObject2) 

For Each o As IRunnable In runnableObjects 
    o.Run() 
Next 
2

마찬가지로 이것은 Command Design Pattern입니다. 그러나 결과를 얻는 자바 방식에 더 가깝습니다. C#에서는 델리게이트와 C++ 함수 포인터 및 펑터를 사용할 수 있습니다.

이미 일부 Class 메서드에서 반응을 구현 한 경우 더 많은 클래스를 만드는 것이 중요하지 않습니다. C++에서 바인드하거나 C#에서 위임하도록 설정할 수 있습니다. 자바에서는 당신이 찾은 코드를 작성하는 것 외에는 선택의 여지가 없다고 생각합니다.

0

어쩌면 나는 뭔가를 놓치고 있지만, 처음 두 가지는 마치 strategy pattern의 일부가 될 수 있습니다. 기본적으로 객체에는 IAction 유형의 멤버가 있으며, 특정 방식으로 태스크를 수행하기 위해 (즉 특정 전략을 사용하여) 시스템의 필요성에 따라 런타임에 멤버가 할당/재 할당됩니다.

관련 문제