設計模式 重新認識物件導向

2021-09-30 20:05:57 字數 1380 閱讀 8656

從一道面試題講起. 分析

第一點: 顯然需要有park,floor,place三個類

第二點: 每個車位(place)應有乙個in和out方法監控車輛, 同時應該有乙個狀態.

第三點: 顯示空餘車輛的數量, 這個行為應該由停車場park來實現,並且是通過每個floor的彙總

第四點: 攝像頭class輸入的是乙個車輛,記錄則由park進行記錄,記錄後要有地方進行儲存,因此park中要有個carlist屬性進行記錄.

第五點: 顯然我們還需要新增乙個顯示器screen類.需要顯示車牌號和停車時長.因此需要獲取車輛的車牌資訊以及進入時間,再通過當前時間減去進入時間獲得獲得停車時長.

主要的車輛的in和out是由park進行彙總的,park的in方法裡面可能有很多步驟(攝像頭拍攝,顯示器輸出等)

可畫出uml類圖如下

最終可寫出**如下;

//停車場

class park

this.camera = new camera()

this.screen = new screen()

this.carlist = {}

}in(car)

out(car)

emptynum()

return num

}}//層類

class floor

}emptynum()

}return num

}}//車位類

class place

in()

out()

}//攝像頭類

class camera

shot(car)

}}//顯示器類

class screen

showtime(car) 停車時長為$`)

}}//車輛

class car

}const park = new park(3,100)

// 初始化車輛

const car1 = new car('a1')

const car2 = new car('a2')

const car3 = new car('a3')

console.log('第一輛車進入')

console.log(park.emptynum())

park.in(car1)

console.log('第二輛車進入')

console.log(park.emptynum())

park.in(car2)

settimeout(()=> ,1000);

重新認識物件導向和物件導向的設計原則

理解隔離變化 從巨集觀層面來看,物件導向的構建方式更能適應軟體的變化,能將變化所帶來的影響降到最小 各司其職 從微觀層面來看,物件導向的方式更強調各個類的 責任 由於需求變化導致的新增型別不應該影響原來型別的實現 是所謂各負其責 物件是什麼?從語言實現層面來看,物件封裝了 和資料 從規格層面講,物件...

重新認識container

我還清楚的記得,第一次從 那兒聽說container這個詞 結果他給我解釋了半天還是似懂非懂的。今天,偷閒翻了下posa4,發現裡面對container的解釋特別清楚。粗略的理解下來是,為了分離關注點,而實現的對系統資源的封裝。豁然開朗的發現,os就是應用程式的container。突發奇想的,開發乙...

重新認識測試

以前總覺得測試是軟體開發的邊緣職位,開發人員才是軟體生命週期的核心人員。隨著對網際網路公司的了解,逐步了解到測試的重要性。以bat為例,三家公司均設定了測試開發工程師崗位,該崗位的主要職責就是編寫自動化測試案例,通過對 的邏輯進行分析,設計出能夠覆蓋大部分 的測試用例。如阿里的測試開發工程師的崗位描...