가정하자 나는이 다음스칼라에서 다음 관계를 어떻게 모델링합니까?
abstract class Strategy {
val lib: TestingLibrary = ...
}
가 특정 구현이 런타임시
trait LSE extends Market {
def getClosingTime = "16:35:00"
}
수 있습니다
trait Market {
def getClosingTime: String
}
에서 제공 getClosingTime을 필요로하기 때문에 전략 및 TestingLibrary 모두 내가 원하는, 추상적이다 특정 전략 및 TestingLibrary가 모두 LSE를 사용하고 있음을 지정할 수 있습니다. 즉, getClosingTime이 둘 중 하나에서 호출되면 둘 다 "16:35:00"을 반환하는 구체적 구현을 가져야합니다. 나는 비슷한 것을 생각하고 있었다.
val lseStrategy = new Strategy with LSE
가능한 경우 형질을 고수하고 싶지만 LSE와 TestingLibrary를 혼합하는 방법을 알고 싶다. 아마 내 전체의 접근 방식은 수정해야하지만, 주요 비즈니스 규칙은 다음과 같습니다
- 전략이-A TestingLibrary
- 전략 및 TestingLibrary 모두 getClosingTime
- getClosingTime가 같은 구체적인 구현이 있어야 추상적 인 방법에 의존 둘 다 런타임에
- 전략은 생성자에서 매개 변수를 사용하지 않아야합니다 (추가 확장으로 인해 특성으로 변환되어야 할 수도 있음)
- Strategy의 사용자는 TestingL 라이브러리
당장 나는 어리둥절하게 여김에있어 다양한 옵션을 찾고 있습니다. 자바에서 나는 다음과 같은
class LSETestingLibrary extends TestingLibrary {
String getClosingTime {return "16:35:00"}
}
class Strategy {
TestingLibrary lib;
Strategy(Market market) {
if (market == LSE) lib = new LSETestingLibrary();
}
String getClosingTime { return lib.getClosingTme();}
}
같은 짓을하지만 난 새로운 시장을 추가하기 때문에 일을하는 추한 방법은 전략