C#設計模式之1:策略模式

來源:互聯網
上載者:User

標籤:世界   pre   分享圖片   基於   原則   bst   使用   系統   內容   

首先需要說明的是該系列的所有內容都是基於headfirst設計模式來描述的。因為我之前也看過不少關於設計模式的書,還是發現這本最好,因為這本書裡面給出的例子是最貼切實際的。不說了,開始這個系列吧!

策略模式

設計原則①:找出應用中可能需要變化的地方,把他們獨立出來,不要和那些不變的代碼混合在一起。把會變化的部分提取出來,以便以後能夠輕易的對這部分進行擴充或改動,而不會影響到不變的那部分代碼。這樣,代碼變化引起的不經意後果變少,系統變得更有彈性。

設計原則②:針對介面編程,而不是針對實現進行編程。從現在開始,變化的部分被抽象到介面中,這樣,鴨子就不用知道行為的具體實現了。

設計原則③:多用組合,少用繼承。

策略模式定義:定義了演算法族,分別封裝起來,讓他們之間可以互相替換。此模式讓演算法的變化獨立於使用演算法的客戶。

背景:joe設計了一個鴨子遊戲,這裡面所有的鴨子都有一個基類,所有的鴨子都從這個基類來繼承一致的行為,但是這樣的設計忽略了一個重要的因素:變化。不是所有的子類都具有相似的行為,那這個世界也就不再精彩了。

 

下面是針對這個模式對鴨子遊戲進行的設計:

 public abstract class Duck        {            public string Color { get; set; }            public string Name { get; set; }//假設鴨子有一個名字            private IQuackable _quackable;            private IFlyable _flyable;            protected Duck(IQuackable quack,IFlyable fly)            {                _quackable = quack;                _flyable = fly;            }            public override string ToString()            {                return $"my name is {Name},i am {Color}";            }            public virtual void Swim()            {                Console.WriteLine("all duck can swim");            }        }public interface IQuackable        {            void Quack();        }        public interface IFlyable        {            void Fly();        }        public class ICanQuack : IQuackable        {            public void Quack()            {                Console.WriteLine("i can quack");            }        }        public class ICanFly:IFlyable        {            public void Fly()            {                Console.WriteLine("i can fly");            }        }

首先對鴨子設計了一個基類,這個基類是一個抽象類別,所有其他的鴨子都會從這裡繼承。重要的是對鴨子的叫和飛這兩種行為進行了抽離,做成了介面,因為不是所有的鴨子都會飛,也不是所有的鴨子都會叫。這樣,我們在定義一個鴨子子類的時候,可以針對這種鴨子的特性進行編程。也就提高了系統的彈性。其中,將鴨子的一些行為獨立出來這個符合上面提到的設計原則①,Duck類中針對的是兩個介面來擷取具體的行為這個符合設計原則②,將那兩個介面作為Duck的欄位符合設計原則③。

 

C#設計模式之1:策略模式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.