728x90
책임 연쇄 패턴은 특정 작업을 여러 객체들이 연쇄적으로 처리하는 패턴이다.
요청을 초리할 수 있는 객체를 찾을 때 까지 집합 안에서 요청을 전달한다.
요청의 발신자와 수신자를 분리하거나 요청을 처리할 수 있는 객체가 여러개일 때 그 중 하나에 요청을 보내려는 경우 책임 연쇄 패턴을 적용하면 된다.
이 패턴을 사용함으로써 결합도를 낮출 수 있고 발신자와 수신자를 분리시킬 수 있다.
그치만 이 패턴은 디버깅 및 테스트가 쉽지 않다는 점이 있다.
구조

▷ Handler: 요청을 수신하고 처리 객체들의 집합에 전달하는 인터페이스이다.
▷ ConcreteHandler : 요청을 처리하는 실제 처리 객체
구현
public interface IHandler
{
void setNext(IHandler next);
void process(Number request);
}
===========================================
public class Number
{
private int number;
public Number(int num)
{
this.number = num;
}
public int getNumber()
{
return number;
}
}
===========================================
public class NegativeProcessor : IHandler
{
private IHandler nextChain;
public void setNext(IHandler next)
{
this.nextChain = next;
}
public void process(Number request)
{
if (request.getNumber() < 0)
{
Console.WriteLine($"NegativeProcessor : {request.getNumber()}");
}
else
{
nextChain.process(request);
}
}
}
===========================================
public class ZeroProcessor : IHandler
{
private IHandler nextChain;
public void setNext(IHandler next)
{
this.nextChain = next;
}
public void process(Number request)
{
if (request.getNumber() == 0)
{
Console.WriteLine($"ZeroProcessor : {request.getNumber()}");
}
else
{
nextChain.process(request);
}
}
}
===========================================
public class PositiveProcessor : IHandler
{
private IHandler nextChain;
public void setNext(IHandler next)
{
this.nextChain = next;
}
public void process(Number request)
{
if (request.getNumber() > 0)
{
Console.WriteLine($"PositiceProcessor : {request.getNumber()}");
}
else
{
nextChain.process(request);
}
}
}
===========================================
static void Main(string[] args)
{
IHandler c1 = new NegativeProcessor();
IHandler c2 = new ZeroProcessor();
IHandler c3 = new PositiveProcessor();
c1.setNext(c2);
c2.setNext(c3);
c1.process(new Number(90));
c1.process(new Number(-50));
c1.process(new Number(0));
c1.process(new Number(91));
Console.Read();
}
RESULT >>>>

집합을 조금 다르게 반복적으로 사용할 때 유용
728x90
'STUDY > Design Pattern' 카테고리의 다른 글
해석자 패턴(Interpreter pattern) (0) | 2022.12.28 |
---|---|
명령패턴 (Command Pattern) (0) | 2022.12.28 |
프록시 패턴(Proxy Pattern) (0) | 2022.12.19 |
경량 패턴(Flyweight Pattern) (0) | 2022.12.19 |
옵저버 패턴(Observer Pattern) (0) | 2022.12.19 |