重構到模式(1)——宇宙大爆炸:跟If else說再見

 今天的重構沒有固定的形式,多年來我使用過不同的版本,並且我敢打賭不同的人也會有不同的版本。該重構適用於這樣的情境:switch 語句塊很大,並且會隨時引入新的判斷條件。這時,最好使用原則模式將每個條件封裝到單獨的類中。實現策略模式的方式是很多的。我在這裡介紹的策略重構使用的是字典策略,這麼做的好處是調用者不必修改原來的代碼。今天的重構沒有固定的形式,多年來我使用過不同的版本,並且我敢打賭不同的人也會有不同的版本。該重構適用於這樣的情境:switch

重構到擴充方法(5):動態給執行個體增加行為

情景1:我們知道,我們在使用一個對象的時候,它有哪些行為,都是類寫死的。當我們想給其增加一個行為(方法)的時候,我們怎麼辦?只能修改其原始碼,新增一個方法了事?可這樣做?不是違背了——開放封閉原則了嗎? 情景2:OO三大原則:繼承。繼承的好處是可以少寫代碼。可一旦繼承樹大起來,我們對象就變得肥胖起來。如果按繼承設計WPF,那麼我們每次New一個Button,就繼承了N多屬性,但其實用到的只是常用的幾個,比如“Button.Context"。一味的用繼承,是個壞味道。所以有人提出

重構到擴充方法(4):輕鬆遍曆WPF可視樹與邏輯樹狀結構

 public static class VisualExtension { public static T FindAncestor<T>(this DependencyObject dependencyObject) where T : class { while (dependencyObject != null && !(dependencyObject is T)) {

[你必須知道的.NET]第二十七回:interface到底繼承於object嗎?

《你必須知道的.NET》網站 | Anytao技術部落格  [你必須知道的.NET]第二十七回:interface到底繼承於object嗎?發布日期:2009.03.05 作者:Anytao 2009 Anytao.com ,Anytao原創作品,轉貼請註明作者和出處。說在,開篇之前在.NET世界裡,我們常常聽到的一句話莫過於“System.Object是一切類型的根,是所有類型的父類”,以至於我在《你必須知道的.NET》8.1節

來給反射調用加加速(2):手寫Emit

有個庫,人家寫好了,呵呵,咱直接調用就行了,具體怎麼實現的我不清楚啊。。 分享一些我封裝好的擴充方法吧,基於MethodInfo的,名叫FastInvoke   public static void FastInvoke(this MethodInfo methodInfo, object target) { Dynamic<object>.Instance.Procedure.Explicit.CreateDelegate(methodInfo)

來給反射調用加加速(1):利用運算式樹狀架構

眾所周知,反射調用,速度很慢,那怎麼辦?有什麼方法提速嗎?有啊,這不,我就介紹一下如何利用運算式樹狀架構來加速反射調用。 那為什麼運算式樹狀架構比反射快呢?因為,運算式樹狀架構可以用Emit產生強型別委託。 好吧,讓我們看看如何操作:1. 一定要定義強型別委託,尤其是簽名  /// <summary> /// Represents a generic delegate to a function. /// </summary> public

重構到擴充方法(3):支援鏈式寫法,讓我們瘋狂的點點點

什麼是鏈式寫法?就是Linq那樣的,不停的點點點。比如collection.Where(o=>o.id==0).FirstOrDefault(); 如何?鏈式寫法?關鍵就是要Return! 1. 鏈式寫法,String.IsNullOrEmpty(),寫起來很順,"".IsNullOrEmpty()而不是String.IsNullOrEmpty("")public static bool IsNullOrEmpty(this string str) {

重構到擴充方法(2):別再寫(Action)(delegate(){…})了

話說WPF的Dispatcher類是這樣的方法: public DispatcherOperation BeginInvoke(Delegate method, params object[] args);我們使用的時候不得不這樣些: Dispatcher.BeginInvoke((Action)delegate() { //Do something...

人生不能“從頭再來”

對文章技術,現實!(勵志篇--心若在,夢就在)不同觀點: 雖然這種情況每個行業都有,但IT業最突出,矛盾最嚴重!1. 搞技術沒有出頭之日。因為世界總在變化中,IT更新最快,雲端運算、物聯網,公司要上,你瞭解多少?2. 年紀只會增長,也就意味著比你年輕的越來越多。年紀的增長,不代表技術的提高,因為新技術對每個人都是平等的。3. 年齡的增大,工資不一定增高,雜事卻變多。老媽吼你,都快30了,咋還不結婚?你看人家XXX25歲都有孩子了,一家人多幸福,你這不孝順的,我都一把年紀了,啥時候才能帶孫子啊,5

7種方式實現斐波那契數列

7種方式實現斐波那契數列一:遞迴實現   在學校裡學習遞迴的時候,老師就喜歡舉斐波那契這個例子,看!多簡潔清晰。其實這個例子是非常不適合作為遞迴舉例的,   原因就是效率太慢,除了最後一個數,每個數都被算了一遍又一遍,時間複雜度差不多是5n^2/3。二:數組實現   空間複雜度和時間複雜度都是0(n),效率一般,比遞迴來得快。三:vector<int>實現   時間複雜度是0(n),時間複雜度是0(1),就是不知道vector的效率高不高,當然vector有自己的屬性會佔用資源。四:

.NET 4.0 Beta2中的BigInteger和Complex類

.NET4.0 Beta2中提供了新的System.Numerics命名空間,對應於System.Numerics.dll。該命名空間下就兩個類BigInteger和Complex,我們來簡單瞭解下這兩個類的用法。BigInteger:任意大小的帶正負號的整數1.Int64, SByte, UInt16, UInt32, and

IOS5添加全域英漢字典教程,ibooks,safari內可用

http://bbs.weiphone.com/read-htm-tid-3926290.html 似乎ipad2區還沒有一個關於如何增加英漢全域字典的教程,在其他區找了好久,終於弄好了,在此整理一下教程,主要還都是前人的經驗(感謝Lucky_gjy的研究和蕭十五的教程),希望對還沒弄過的FY有所協助。。另外,weiphone源有21世紀英漢等詞典的deb安裝,但是,那個需要佔用系統硬碟空間(具體見第三步的說明),而且我對詞庫並不滿意,但是如果不是要求很高或者嫌麻煩的可以直接去weiphone源

【速記】進程間傳參,對象比較,NHibernate Virtual

1. 進程之間調用傳遞參數時,擷取參數用Environment.GetCommandLineArgs()方法:字串數組,其中的每個元素都包含一個命令列參數。第一個元素是可執行檔名,後面的零個或多個元素包含其餘的命令列參數。而不要自己去Split(' ') CommandLine。2.  如果要進行對象間比較,則實現IEquatable<T>而不是override Equals(object obj),同時實現GetHashCode()時候,可以實現IEqualityComparer&

【勵志】職場10年如何磨鐵成劍,學習很重要

  常言道,10年磨一劍。職場亦如此,潛心經營,10年的時間能讓你從“新人”變成“紅人”,從“紅人”變成“達人”。而若糊塗混日,10年的時間只能讓你從青年變成中年,拿著一份“比上不足,比下無餘”的收入。      你10年以後會怎樣,想怎樣?有沒有想過這個問題並且為之困擾?  這一段時間,Jason頗為不悅。原因是在一個多月前,他參加了大學同學畢業10周年聚會,來的人數超過80人。聚會主題之一是大家彙報畢業10年來的工作情況,看看都發展得怎樣。  不聽不知道,一聽嚇一跳。兩個多小時的輪流發言,J

【剖析設計模式】——OO與設計原則

     OO有三大特性:封裝性,多態性,繼承性。    設計原則有5種:    1. 單一職責(SRP):一個類應該有且僅有一個引起變化的因素。    2. 開放封閉(OCP):對擴充開放,對修改封閉。    3. Liskov替換(LSP):子類可以替換為它的基類。    4. 依賴倒置(DIP):高層模組不應該依賴於低層模組,二者都應該依賴於抽象。抽象不應該依賴於細節,細節應該依賴於抽象。    5. 介面隔離(ISP):一個類對另外一個類的依賴建立在最小的介面上。    那麼,

有些事現在不做,一輩子也不會做了

從現在開始,格外珍惜時間,讓生活充實起來請安靜下來,想想什麼是你真正想要的從現在開始,只吃健康食物從現在開始,把已經做了一半的工作統統完成從現在開始,改變說話的方式從現在開,感受深呼吸的美麗媽媽的手,你握過嗎?從現在開始,對不瞭解的領域做一番探索和研究在家裡掛一個小黑板從現在開始,運動起來享受一次香香的、熱騰騰的泡泡浴 買個零錢罐,存點零花錢和一個小孩一起度過一天清理你的衣櫥請朋友來家裡看一張DVD每個禮拜拿一天只吃素到一個離你很近但從沒鴦去過的小街或者胡同轉一轉從今天開始,忘掉某個長久以來一直

君子動口也動手

小感想而已,也是一個新的開始。 電腦學科,是一門實踐性很強的學科。如果整天只看,比如看《部落格園》的文章,看MSDN,看別人的代碼,而不去思考,練習,實踐,到頭來還是竹籃打水一場空,看似什麼都會,又什麼都不會。 比如,二叉樹非遞迴演算法,各種排序演算法,圖的遍曆,單鏈表的交叉,甚至各種API的使用,如果不經過自己親自去寫,而且寫至少3遍,很難真正的懂。 不能真正的懂,那麼做題,或者遇到問題時候,需要花大量時間去找,去理解。你說有Google,那麼這知識是Google的,而不是你的。直接從腦子裡面

【架構設計】之前傳——變態的使用者需求

  咚咚咚咚,“架構設計”系列開始啦~~~《X戰警》有前傳《金剛狼》,我這裡也些個前傳——變態的使用者需求。原型來源於我所做的項目。  宇宙真理:唯一不變的就是變化。  架構設計就是應對不斷變化的變化,將變化帶來的影響降至最低的。這也是GOF寫《設計模式》的初衷。  下面就讓我們來看看使用者提出了哪些變態的需求:  1. 使用WPF來設計介面,並且有可能轉移到Siverlight。哦,一個CS的,一個BS的,咋轉換?重做嗎?需要想一想了。  2.

【我的項目經驗】——開發流程管理

  我所在的公司過了CMMI-level5級最高認證。嚴格來說,我一直認為只能達到CMM3-4級的水平,因為當時05年過了3級之後,一下子就跳到了5級認證,從理論上來講,CMM是持續改進,不可能在短時間越級,尤其越到最進階5級。不過,不管怎樣,國內公司達到CMMI5級挺少的。我們公司的CMMI5最明顯的特徵就是Reject標準,一個模組Priority >= Normal層級的Bug數如何超過預估數的1/3,就會Reject。比如

【我的項目經驗】——進程(上)

  啥是進程?簡單的說就是一個正在啟動並執行程式。比如開啟QQ,就是一個進程。  啥是線程?簡單的說就是進程的細分。進程好比西瓜,線程就是西瓜片。切丫切,想切幾個切幾個。不過一個進程有1個到N個線程。  進程與線程的區別?進程是系統分配各種資源(比如記憶體)的單位,而線程是系統分配CPU時間的基本單位。為啥不以進程為分配CPU時間單位呢?因為進程運行於一個特定的進程上下文,它擁有很大的資料量,儲存著各種讓進程生存的環境資訊。如果以進程為單位分配CPU時間,就需要頻繁的保持和重建這些上下文,耗費大

總頁數: 61357 1 .... 4001 4002 4003 4004 4005 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.