重構筆記6--type code 的替換方式
- 以類取代型別碼 -- 型別碼不影響類的行為
型別碼是純粹的資料時(也就是型別碼不會在switch語句中引起行為變化時)才能以類來取代它
如:人的血型,這是人的一個基本屬性,並不會影響人的升職,喝酒,吃飯等行為
- 以子類取代型別碼 -- 型別碼不可變,並且會影響類的行為
型別碼不會影響宿主類的行為
如果有以下兩種情況,則不能這樣做
(1) 型別碼值在物件建立之後發生了改變
(2) 型別碼宿主類已經有了子類
還是再如人的血型,如果是血型不同,性格不同,然後吃飯時間點不同,即一個人的血型不會改變,但是血型會影響人吃飯的時間,那麼可以建立子類:A型血person,B型血person,O型血person
- Replace type code with state/strategy
型別碼的值在物件生命週期中發生了變化,或者宿主類不能被繼承
比如person的職位,根據職位不同薪水不同
Person的物件建立完成後可以改變職位,那麼薪水也會隨著改變
物件不能改變,那麼物件呼叫獲取薪水的方法也不會改變
用state/strategy 就是為了能夠動態的改變物件的行為
相關推薦
重構筆記6--type code 的替換方式
以類取代型別碼 -- 型別碼不影響類的行為型別碼是純粹的資料時(也就是型別碼不會在switch語句中引起行為變化時)才能以類來取代它 如:人的血型,這是人的一個基本屬性,並不會影響人的升職,喝酒,吃飯等行為 以子類取代型別碼 -- 型別碼不可變,並且會影響類的行為型別
【無人機 學習筆記 6】GPS定位方式 GPS差分定位
一、GPS定位原理 二、GPS定位方式 按定位方式:單點定位,相對定位(差分定位) 按接收機的運動狀態分:動態定位,靜態定位 2.1、絕對定位(單點定位) 絕對位置,即某一座標系下的絕對座標 2.2、相對定位(差分定位) 基線向量,即進行同步觀測的
EF6 學習筆記(一):Code First 方式生成數據庫及初始化數據庫實際操作
view sqlserver 4.5 xpl 安裝 右鍵 ef6 字符串 ref 參考原文地址: https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-wit
docker筆記6-使用tsl方式連線docker和CA證書的安裝使用
記錄使用tsl連線docker, CA證書的安裝使用 生成安裝證書 參照原文連結:https://segmentfault.com/a/1190000012510820 auto-tls-certs.sh Bash 指令碼程式碼 #!/bin/bash # # Crea
TI CC2530 學習筆記-6-NewBit-CC2530-Timer4-查詢方式
TI CC2530 學習筆記-目錄 TI CC2530 學習筆記-6-NewBit-CC2530-Timer4-查詢方式 通過CC2530定時器4來實現週期溢位,用此訊號來控制LED燈,每秒改變狀態一次。 CC2530的定時器4和定時器3只有定時器的名字不同,其他都是一樣的。
重構手法30:Replace Type Code with Class (以類取代型別碼)
類之中有一個數值型別碼,但它並不影響類的行為。以一個新的類替換該數值型別碼。 動機:在以C為基礎的程式語言中,型別碼或列舉值很常見。如果帶著一個有意義的符號名,型別碼的可讀性還不錯。問題在於,符號名終究只是個別名,編譯器看見的、進行型別檢驗的,還是背後那個數值。任何接受
C++反彙編學習筆記6——變數在記憶體中的位置和訪問方式
兩年前寫的,歡迎大家吐槽! 轉載請註明出處。 1. 全域性變數和區域性變數的區別 具有初始值的全域性變數在原始碼連結時就被寫入所建立的PE檔案,當該檔案被執行時作業系統分析各個節中的資料填入對應的記憶體地址中,這時全域性變數就已經存在了,等PE檔案的分析和載入工
C++筆記(6):標準模板庫STL:容器、叠代器和算法
strong 並且 pty 優先級隊列 決定 image left sig 樹結構 STL(Standard Template Library)是C++標準庫的一部分。STL的代碼從廣義上講分為三類:容器、叠代器和算法。 1.容器 2.叠代器 3.算法 ---------
《java並發編程實戰》讀書筆記6--取消與關閉
特殊 指令 1.5 搶占 用法 tor wid cto hook 這章的主要內容是關於如何使任務和線程安全,快速,可靠的停止下來。 7.1 任務取消 在Java中沒有一種安全的搶占方式來停止線程,但是可以使用一些協作機制,比如: 讓素數生成器運行1秒後取消(並不會剛好在運
ThinkPHP5學習筆記(6)請求和響應
thinkphp在線視頻課程:http://www.kancloud.cn/tpshop/thinkphp5/220692Request請求對象和Response響應對象$_GET、$_POST、$_REQUEST、$_COOKIE調用請求對象$request=Request::instance()$this
CI框架源代碼閱讀筆記6 擴展鉤子 Hook.php
cti enable blog have 子列 rmi 是否 lap tool CI框架同意你在不改動系統核心代碼的基礎上加入或者更改系統的核心功能(如重寫緩存、輸出等)。比如,在系統開啟hook的條件下(config.php中$config[‘enable_hooks
DevExpress Components16.2.6 Source Code 重編譯教程
按鈕 5.0 max 界面 cstyle 套件 代碼 info 時間 http://www.cnblogs.com/Soar1991/p/6669862.html DevExpress 是一個比較有名的界面控件套件,提供了一系列優秀的界面控件。這篇文章將展示如何在擁有源
QT筆記 -- (6) opengl
ini ref func demo correct ptr csdn entity eap 參考 http://blog.csdn.net/myths_0/article/details/24431597 用glut繪制一個茶壺 一句話,繼承QGLWidget,實現下
筆記6 壓縮工具、安裝軟件包(rpm、yum、源碼包)、shell。
yum、shell壓縮打包常見的壓縮文件windows:rar、zip、7zLinux:.zip、.gz、.bz2、.xz、.tar、.gz、.tar.bz2、.tar.xzgzip壓縮工具它壓縮後邊直接跟文件名就可以命令:gzip -d 解壓的意思命令gzip -數字 表示它的壓縮級別,1——9,數字越大
金典 SQL筆記(6)
test 出身 信息 這樣的 n) 需求 ima 都是 鏈接 page223-索引 --利用SQL 語句創建索引 --CREATE INDEX 索引名稱on 表名(字段 ,字段, 字段字段n) --索引名稱必須為唯一的,字段 ,字段, 同意一個到多個 -
【ALB學習筆記】基於事件觸發方式的串行通信接口數據接收案例
except 和數 從數據 發送數據 exceptio 工作原理 實時 double 窗體 基於事件觸發方式的串行通信接口數據接收案例 廣東職業技術學院 歐浩源 1、案例背景 之前寫過一篇《基於多線程方式的串行通信接口數據接收案例》的博文,討論了采用輪詢方
JavaScript筆記6-數組新方法
ray javascrip 類型 sum pre lastindex each clas reduce 七.ECMAScript5關於數組的新方法 1.forEach():遍歷數組,並為每個元素調用傳入的函數; 舉例: 1 var a = [1,2,3
[javase學習筆記]-6.5 類類型參數與匿名對象
需要 public num trac article 我們 品牌 類類型 color 這一節我們來說說類類型參數和匿名對象. 我們繼續用之前的小汽車類吧 class Car { int num;//這是輪胎數屬性 String color;//這是顏色屬性
ESP8266學習筆記6:ESP8266規範wifi連接操作
.text n) 梳理 pri his tail 周期性 官方 esp 一、前言 我整理了從2015年至今關於ESP8266的學習筆記,梳理出來了開發環境、基礎功能、進階學習三大部分。方便自己和他人。可點此查看,歡迎交流。 之前在筆記4《ES
[javase學習筆記]-6.6 基本數據類型參數與引用數據類型參數的傳遞過程
img 兩個 數據類型 語句 hang .net 全部 pre 進棧 這一節基本數據類型參數和引用數據類型參數的傳遞過程。 數據類型參數和引用參數我們在前面章節中都已涉及到了,那麽我們來看看以下的兩段代碼: //基本數據類型參數傳遞 class Demo