假設我有以下如何在Scala中建立以下關係?
abstract class Strategy {
val lib: TestingLibrary = ...
}
雙方戰略和TestingLibrary是抽象的,因爲它們需要getClosingTime通過
trait Market {
def getClosingTime: String
}
提供具體的實現可能是
trait LSE extends Market {
def getClosingTime = "16:35:00"
}
在運行時,我想能夠指定特定的策略和測試庫都使用LSE。這意味着當調用getClosingTime時,它們都應該有一個返回「16:35:00」的具體實現。我在想像
val lseStrategy = new Strategy with LSE
我想堅持性狀如果可能,但不知道如何混合LSE與TestingLibrary。也許是我的整個方法需要修改,但主要業務規則:
- 戰略,一個TestingLibrary
- 戰略和TestingLibrary都依賴於抽象方法getClosingTime
- getClosingTime應該有相同的具體實施無論是在運行時
- 戰略應在構造函數中沒有參數(由於進一步擴展它可能 需要被轉換爲特徵)戰略
- 用戶不應該知道什麼TestingL文庫
此刻,我發現在不知所措的不同選項的數量。在Java中我不喜歡的東西下面
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();}
}
,但我覺得「如果」醜陋的方式做事情,因爲增加了新的市場將涉及不必要的重新編譯戰略