日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式之禅(读后感悟随笔)-单一职责原则

發布時間:2023/12/15 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式之禅(读后感悟随笔)-单一职责原则 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  一直以來,自己讀過的技術類書籍也不少了,但是都犯了一個毛病就是沒有很好的記錄下來,有些東西可能并不是平日開發中時時刻刻用到的,隨著時間的延長,學過的東西慢慢也就淡忘了,剛好最近有些時間,也正打算把<<設計模式之禪>>這本書好好的通讀一遍,順便把所想所得詳細的記錄一下,也方便以后查閱和回顧。

  好,以上都是“廢話”,接下來切入正題。

  提起這個設計模式啊,額...,還是打算再廢兩句話,沒辦法我這人就是啰嗦,當然你也可以說我是湊字數。

         

  我這個人呢,比起看A片,平日我更喜歡看小說,而且還是玄幻爽文類的,沒辦法,我就是這么有個性。這類小說呢,都有一個共同的特性就是男豬腳都會修煉很吊炸天的功法,然后在修真界各種裝逼各種秀,一般這種功法有時候初期的時候還都很平平無奇,甚至是人盡皆知,但就是沒幾個人練成,你說氣人不。。。但偏偏男豬腳卻。。。好了好了,哈哈,該打住了(任性也得有個限度不是?)咱們這里剛才提到了功法,對,設計模式給我的第一印象就像是一部逆天功法,看似平平無奇人盡皆知,可是能夠大成者卻少有,更別說臻至化境了,但江湖上一直有個傳說便是能夠將此功法練至化境的便可以打破這世界的禁錮成為天下至尊。

  說了那么多,和今天的單一職責原則有什么關系呢?

  要想修煉一部功法,最基本的就是要明白功法運行的軌跡、運氣方法啊等等最基本的修煉方式或者說是約束規則,而設計模式之中就有那么六大基本的原則,也就是咱們修煉這部功法的基本規則,分別是單一職責原則、里氏替換原則、依賴倒置原則、接口隔離原則、迪米特法則、開閉原則(當然有人也會將組合/聚合復用原則總結進去,稱為設計模式的七大原則)。

  而我們今天要聊的就是最簡單、最基礎、也最讓人糊涂的-----單一職責原則。

  其實從字面的意思我們也很容易理解單一職責原則,說白了就是確保你寫的東西(類、接口、方法)有著單一的職責,很多時候我們都拿人(person)來舉例子,我們也拿這個person來舉例子,但咱們這個例子和他們的不太一樣,畢竟咱們談論的是修煉,這個人的身體結構還是要了解清楚的,不專業的講,人有雙手、雙腳、一個頭、五臟、六腑、、、等等對吧?這里我們的劃分其實就是單一職責原則的一種表現,我們的頭就是用來思考和觀察的,我們的手就是來拿東西的,腳就是用來走路的,這個時候有人就說了,“老弟啊你還是太年輕,誰說手就只能來拿東西啊,老哥我練的蛤蟆功用手走路也不是問題的啊”,對,沒毛病,練鐵頭功的那哥們用頭走路都可以。這也就是我們平時開發中經常會遇到的或者經常困惑的地方,就是如何劃分這個“職責”的問題,準確的說這個職責的劃分,確實沒有特定的界限,這要根據你自己的業務(也就是你所習功法的效果)來決定,您老修煉飛檐走壁,老拿頭來走路也不是那么回事吧。

  說到了這里,您可能大致的了解了這個所謂的單一職責原則,但是我們在代碼中怎么寫呢?或者說我們修煉的時候怎么處理呢?咱們接下來就仔細的看看吧。

  修煉的階段一般都有那么幾種,比如聚氣、淬體、拓脈、元嬰、紫府。。。。,我們拿結元嬰來舉個例子,就像咱們上面提到的person,咱們也造個小人吧。

          

  由于咱們目前功力低微,咱們元嬰那小人就不要太復雜了,一個頭倆胳膊倆腿就夠了,咱這個小人能干嘛呢?也就只能盤腿打坐、掐口訣聚氣、冥想了

  說到這里,咱們就要開始思考了,我練就這個小人是干嘛的(也就是我們要處理什么業務的)目的很簡單,讓這小人可以在我們的氣海內自行修煉運轉功法,以便提升我們的修煉速度,當我們遇到致命危險的時候,可以駕馭元嬰隱匿逃脫(這也就是我們要實現的功能)。

  咱們這里整理出來兩個主要的功能一、提升修煉速度 ,二、隱匿逃脫,來看圖

   

?

  根據上面這個圖,咱們先理一理,我們修煉元嬰的目的有兩個分別是提升修煉速度和隱匿逃脫,用元嬰來提升修煉速度我們需要三種方法一是掐手決、二是打坐、三是冥想,而這三種方法分別需要我們的手、腳、頭去完成,同樣使用元嬰隱匿逃脫也有三種方法同樣也需要手、腳、頭去完成。

  我們得出一個結論,我們無論實現什么功能,都離不開手、腳、頭。

  我們稍加修改再來看這個圖:

  

  可能看到這里,很多同學已經蒙了,“老弟啊,咱不是再說單一職責原則嗎?剛才還挺清楚,咋越說越蒙呢?說好的代碼呢?”

      

  額,說實話,大哥其實我也蒙了,說來說起我都把握自己繞進去了,先讓我緩會。。。。。。。。。。。。。。。。。。

  好了,緩好了,咱們接著扯。。。

  上面的兩個例子呢,其實牽扯到兩種方式,一是使用接口的單一職責原則,另一個是使用類的單一職責原則,

  咱們先看第一個圖,第一張圖是以功能來劃分的,也就是我們要達到的效果,這種時候我們采用的應該是接口執行單一職責原則,也就是說,您不用管我怎么提高的修煉速度,或者不用管我怎么隱匿逃脫的,我的提升修煉速度的接口就是提升修煉速度的我不管你隱匿逃脫的事,你隱匿的接口就是負責隱匿逃脫別的你也別管,(巴啦啦一大堆,還是看代碼吧。。。)看代碼:

/**提升修煉*/ public interface TiShengXiuLian {/*** 掐手決* @param hand*/void qiaShouJue(Hand hand);/*** 打坐* @param foot*/void daZuo(Foot foot);/*** 冥想* @param head*/void mingXiang(Head head); }/**隱匿逃跑*/ public interface YinNiTaoPao {/*** 虛空隱匿* @param hand*/void xuKongYinNi(Hand hand);/*** 飛天之術* @param foot*/void feiTianZhiShu(Foot foot);/*** 遁地之術* @param head*/void dunDiZhiShu(Head head); }/**元嬰*/ public class Person implements TiShengXiuLian, YinNiTaoPao {private Head head = new Head();private Hand hand = new Hand();private Foot foot = new Foot();@Overridepublic void qiaShouJue(Hand hand) {//掐手決}@Overridepublic void daZuo(Foot foot) {//打坐}@Overridepublic void mingXiang(Head head) {//冥想}@Overridepublic void xuKongYinNi(Hand hand) {//虛空隱匿}@Overridepublic void feiTianZhiShu(Foot foot) {//飛天之術}@Overridepublic void dunDiZhiShu(Head head) {//遁地之術}private void xiuLian() {/*掐手決*/qiaShouJue(hand);/*打坐*/daZuo(foot);/*冥想*/mingXiang(head);}private void taoPao() {/*如果哪都有人*/xuKongYinNi(hand);/*如果天上沒人*/feiTianZhiShu(foot);/*如果地下沒人*/dunDiZhiShu(head);}}

?

  我們來分析一下上面的代碼,我們的關注點是功能(修煉用來干嘛的),我們不管用什么來實現,我要的就是這種效果,我們抽取了兩個接口一個是提升修煉的,一個是隱匿逃跑的,這兩個接口都有著自己單一的職責,假如有一天我又新增了一個逃跑的手段,我直接修改我的逃跑接口就好了,并不耽誤咱們修煉。

  那好,咱們再來看第二種情況,也就是類的單一職責的代碼:

/*** 頭部*/ public class Head {public void mingXiang(){System.out.println("冥想");}public void dunDi(){System.out.println("遁地");} }/*** 手*/ public class Hand {public void shouJue(){System.out.println("手決");}public void xuKong(){System.out.println("虛空");} }/*** 腳*/ public class Foot {public void daZuo(){System.out.println("打坐");}public void feiTian(){System.out.println("飛天");} }/*** 元嬰*/ public class Person {private Head head = new Head();private Hand hand = new Hand();private Foot foot = new Foot();/*** 修煉*/private void xiuLian() {/*頭部冥想*/head.mingXiang();/*掐手決*/hand.shouJue();/*打坐*/foot.daZuo();}/*** 逃跑*/private void taoPao() {/*遁地*/head.dunDi();/*虛空*/hand.xuKong();/*飛天*/foot.feiTian();}}

?

  這次我們是按照身體的部位來進行的分化,我們手、腳、頭都有著自己的單一職責互不影響,假如有一天咱們遇到強敵,被斷去一臂,也是不會影響咱們去施展飛天之術來逃跑的,也不影響以后打坐來修行的。

  好了,扯了那么多,其實單一職責原則,沒那么復雜,是我想著形象點去說明情況,才搞的繞來繞去,你只要記住一點,類、接口、方法,咱們完成的功能就要單一,吃飯就是吃飯,別想著吃完還得拉,索性寫一個里面,那是不對的,那種代碼不光寫起來惡心,吃(讀)起來更惡心

總結:

  其實呢,單一原則是最簡單的一個原則,也是最不容易把握的一個原則,但無論你從哪個點出發,都應該記住,我就是我,是不一樣的煙火,吃就是吃,想拉你就進廁所。好了,今天就扯到這里吧,來日方長,各位咱們江湖見,哈哈,對了各位有誰看見“方長”去了哪個方向???

  (哈哈,小白一枚,若有不對之處,還望多多指教)

轉載于:https://www.cnblogs.com/HelloHai/p/10838749.html

總結

以上是生活随笔為你收集整理的设计模式之禅(读后感悟随笔)-单一职责原则的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。