0
다음과 같은 팩토리 메소드가 있습니다. 이 설계하는 더 좋은 방법은 동적 기반으로 인스턴스를 만들 수 있습니다, 그래서요약 생성자 인수가 다른 유형의 팩토리 또는 팩토리 메소드
public IPolicy CreatePolicy(Context context)
{
IPolicy policy = default(IPolicy);
ISettings settings = _settings.Get(context);
Policy policyType = (Policy) Enum.Parse(typeof(Policy), settings.Policy);
switch (policyType)
{
case Policy.Policy1:
policy = new Policy1(_policy1Service, _logHandler);
break;
case Policy.Policy2:
policy = new Policy2(_policy2Service, _logHandler);
break;
case Policy.Policy3:
policy = new Policy3(_policy1Service, _policy2Service, _logHandler);
break;
}
return policy;
}
당신은'IPolicy'의 일반적인 방법을 만드는 것에 대해 생각해 보셨습니까 – MethodMan
당신의 코드가 OCP를 존중한다고 주장 할 수 있습니다. 'CreatePolicy'는 닫힙니다 (새로운 정책을 추가하더라도 그것을 호출하는 클라이언트는 변경 될 필요가 없습니다)하지만 스위치의 숨겨진 정보에서 확장을 위해 열려 있습니다. OCP에 따르면 변종 보호 *가 있다고합니다. – Fuhrmanator