<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                這篇博客是好久之前就打好的草稿,可是一直就拖到了現在,剛好在保定上課,筆記本也排不上大用場,翻看手機,終于撿起了這些草稿,決定寫完。 再說設計模式之前,我們先說說開閉原則。 ## 一、開閉原則(ocp) 以前讀這些官方解釋,總是覺得很官方,現在在讀,覺得句句經典。和大家共享 遵循開閉原則設計出的模塊具有兩個主要特點: (1)對于擴展是開放的(Open for extension)。這意味著模塊的行為是可以擴展的。當應用的需求改變時,我們可以對模塊進行擴展,使其具有滿足那些改變的新行為。也就是說,我們可以增加模塊的功能。 (2)對于修改是關閉的(Closed for modification)。對模塊行為進行擴展時,不必改動模塊的源代碼或者二進制代碼。模塊的二進制可執行版本,無論是可鏈接的庫、DLL或者.EXE文件,都無需改動。 **?注意**:開閉原則是針對一個模塊來說的,不然,開閉毫無意義。 這兩個模式是我們容易混淆的,因為從類圖是看,基本是一樣的。以前博客中都已經介紹過這幾個設計模式,這里不做詳細介紹,這篇博客是最近翻看筆記時的一點感觸,來說說這兩個設計模式的不同。 ## 二、你還是你,我還是我——策略VS簡單工廠 1、問題域不同 首先看一下兩個模式的定義: **策略模式** 策略模式(Strategy):它定義了一系列的算法,并將每一個算法封裝起來,而且使它們還可以相互替換。策略模式讓算法的變化不會影響到使用算法的客戶。 ![](https://box.kancloud.cn/2016-02-18_56c5ce75ba397.jpg) **簡單工廠** 簡單工廠模式(Simple Factory Pattern)屬于類的創新型模式,又叫靜態工廠方法模式(Static FactoryMethod Pattern),是通過專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。 ![](https://box.kancloud.cn/2016-02-18_56c5ce75e6e94.jpg) 最主要區別是就是:策略模式為行為型設計模式,而簡單工廠為創建型模式。兩個設計模式解決的問題域本就不同,側重點不一樣,放開眼界,學習這兩個模式,不可一起咬住不放。 2、開閉原則 策略模式的?**特點:**創建,選擇不同策略的責任在客戶端。 如果有擴展著怎么辦呢?需要如下變動: 1:策略端增加新的策略類,無需改動已有的策略端代碼————開閉原則 2:界面增加新策略字符串,**客戶端進行調用修改**————客戶端是無論如何都是要進行修改的。 那么我看簡單工廠的**特點:**選擇,創建的責任在算法端 所以如有擴展,需要如下變動: 1:算法端增加新的算法類,**調用算法的修改 還在 算法端**,需要改動兩處————違反開閉原則 2:客戶界面增加選擇新的算法的字符串————客戶端是必定要修改的 這就是區別二,一個遵循了開閉原則,一個沒有。還有一點就是,并不是不遵循開閉原則就一定不好,具體還是要看需求,具體對待。 宏觀上問題域不同,細節上,是否需要遵循開閉原則,?這兩點足以讓我們可以適時的選擇清楚簡單工廠和策略模式了。? **三、策略 同 簡單工廠** 兩個模式不考慮問題域的話,只看類圖,都是通過繼承來實現子類的擴張,都能解決動態變化的功能。因此都有一些共性: **優點:** 1、 簡化了單元測試,因為每個算法都有自己的類,可以通過自己的接口單獨測試。 2、 避免程序中使用多重條件轉移語句,使系統更靈活,并易于擴展。 **缺點:** 1、 因為每個具體策略類都會產生一個新類,所以會增加系統需要維護的類的數量。 **總結:**其實23個設計模式,非要交合在一塊說,那么我想說:都是相近的,因為他們統一的宗旨是:抽象,繼承,多態,封裝?,所以,設計模式每個和每個都有想象的地方,或許正因為是這樣,才有的設模式的三大類:創建型,結構性,行為型之分,然后,每個小的區域內,又有各個不同的側重點。 這是我學習設計模式的一點小感悟: 學習設計模式:不謀全局者,不足以某一域。 使用設計模式:知其然,知其所以然。?
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看