필터 목록이 있습니다. 필터마다 책임이 다르며 다양한 입력 매개 변수를 허용합니다. 인터페이스는 다음과 같습니다.
void doFilter(Context context);
그리고 다음과 같이 실행합니다.
void main(){
context.setA(input_for_filter_a);
context.setB(input_for_filter_b);
context.setC(input_for_filter_c);
//...
firstFilter.doFilter(context);
}
필터를 추가하려면
컨텍스트를 수정합니다. 예를 들어 getter 및 setter를 사용하여 개인 필드를 추가합니다.
새 입력 매개 변수를 채우기 위해 main ()을 업데이트하십시오.
이러한 모든 입력 매개 변수를 분리하여 다른 필터가 알아야하는 각 매개 변수에 초점을 맞출 수있는 방법이 있습니까? main ()의 코드가 안정적 이길 바랍니다. 감사!
PS 일부 필터에는 입력 매개 변수가 없을 수 있습니다.
Context
와 Filter
구현 세부 사항 간에 위험한 종속성을 만들고 있습니다. 이러한 높은 커플 링으로 인해 .NET Framework Context
를 추가하거나 변경할 때마다 변경해야하는 경우와 같이 이미 인식 한 문제가 발생합니다 Filter
.
모두 Context
알아야 Filter
할 것은 구현 세부 사항을 실행하는 공용 메서드가 있다는 것입니다. 그리고 더 이상은 없습니다! 이 메소드는 Filter
인터페이스 에서 정의됩니다 .
Filter
Context
존재 하는 것에 달려 있습니다. 또한 매개 변수를 처리하는 방법도 알고 있습니다.
책임 체인을 구현하기 Context
위해 일련의 Filter
객체를 가질 수 있으며 , 인터페이스에 정의 된 필터링 메소드를 반복하고 호출 할 수 있습니다.
의사 코드에서는 다음과 같습니다.
class Filter {
function Filter(context, params) {
// initializes a filter object with a context and its specific parameters
}
function run() {
// run is the method defined by the Filter interface
// here goes the implementation details for this filter
}
}
class Context {
array filters = [];
function applyFilter(filter) {
filters.push(filter);
}
function run() {
for filter in filters {
// all a context needs to know is how to execute a filter
filter.run
}
}
}
void main() {
context = new Context();
filter_a = new Filter(context, params_a);
filter_b = new Filter(context, params_b);
context.applyFilter(filter_a);
context.applyFilter(filter_b);
context.run();
}
의사 코드에 대해 미리 사과드립니다. 귀하의 예제 구문을 기반으로 Java 또는 C ++를 사용하고 있다고 생각합니다. 둘 다 모르겠지만 같은 구문을 따르려고했습니다.
나는 이것이 문제에 대해 약간의 빛을 비추 길 바랍니다. 더 명확하게 할 수 있으면 알려주세요.
베스트!
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다