日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

设计模式学习笔记-基础知识篇

發(fā)布時(shí)間:2023/12/1 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式学习笔记-基础知识篇 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 設(shè)計(jì)模式的重要性

  1.1?設(shè)計(jì)模式解決的是在軟件過(guò)程中如何來(lái)實(shí)現(xiàn)具體的軟件功能。實(shí)現(xiàn)同一個(gè)功能的方法有很多,哪個(gè)設(shè)計(jì)容易擴(kuò)展,容易復(fù)用,松耦合,可維護(hù)?設(shè)計(jì)模式指導(dǎo)我們找到最優(yōu)方案。

  1.2?設(shè)計(jì)中往往會(huì)存在設(shè)計(jì)缺陷,這些缺陷包括:

    僵化性:難以對(duì)軟件進(jìn)行改動(dòng),即使在功能上來(lái)看是很小的改動(dòng)

    脆弱性:在進(jìn)行很小的改動(dòng)時(shí),可能導(dǎo)致很多地方出現(xiàn)問(wèn)題

    頑固性:要把系統(tǒng)中某些通用的功能分離出來(lái)的努力和風(fēng)險(xiǎn)非常巨大

    粘滯性:當(dāng)面臨改動(dòng)時(shí),改動(dòng)的方案有很多,一些會(huì)保持設(shè)計(jì),一些會(huì)破壞設(shè)計(jì),當(dāng)采用保持設(shè)計(jì)的方法比用破壞設(shè)計(jì)的方法更難應(yīng)付變化時(shí),說(shuō)明原設(shè)計(jì)具有較高的粘滯性

    晦澀性:模塊難以理解

    不必要的重復(fù):代碼不能復(fù)用,往往通過(guò)Copy-Paste來(lái)實(shí)現(xiàn)相似功能

    不必要的復(fù)雜性:設(shè)計(jì)中包含了沒(méi)有用的成分,往往是過(guò)度設(shè)計(jì)導(dǎo)致的

  1.3?如果你覺(jué)得在開(kāi)發(fā)過(guò)程中發(fā)現(xiàn)以上問(wèn)題(缺陷),那么就需要使用設(shè)計(jì)模式來(lái)改善最初設(shè)計(jì),即重構(gòu)原有的設(shè)計(jì)。如果你是最初的設(shè)計(jì)者,那么也需要應(yīng)用設(shè)計(jì)模式來(lái)找到一個(gè)最優(yōu)方案。設(shè)計(jì)模式不是編程語(yǔ)言,它修煉的是程序員的內(nèi)功。因此,對(duì)于一個(gè)開(kāi)發(fā)者來(lái)說(shuō),學(xué)習(xí)設(shè)計(jì)模式是非常必要的。

2. 對(duì)于初學(xué)者來(lái)說(shuō),必要的知識(shí)準(zhǔn)備還是必須的,沒(méi)有這些基礎(chǔ)就很難將這些理解透徹。

  2.1?面向?qū)ο蠡局R(shí)

  設(shè)計(jì)模式是面向?qū)ο缶幊痰脑O(shè)計(jì)指導(dǎo),因此學(xué)習(xí)設(shè)計(jì)模式前先要理解什么是面向?qū)ο?#xff0c;這里只簡(jiǎn)單列出了面向?qū)ο蟮闹饕拍?#xff0c;要是初學(xué)者的話還得查閱相關(guān)資料;對(duì)已經(jīng)了解的老手來(lái)說(shuō),權(quán)當(dāng)復(fù)習(xí)和梳理一下吧。

    2.1.1 面向?qū)ο笕筇卣?#xff1a;封裝、繼承、多態(tài)

    2.1.2 類與實(shí)例

    2.1.3 構(gòu)造(析構(gòu))方法

    2.1.4 重載

    2.1.5 訪問(wèn)修飾符

    2.1.6 屬性/字段/方法

    2.1.7 抽象類

    2.1.8 接口

  2.2?UML類圖

  在學(xué)習(xí)設(shè)計(jì)模式時(shí),通常接觸到的只有類圖,因此讀懂UML類圖對(duì)理解模式來(lái)說(shuō)有很大幫助。下面來(lái)介紹UML類圖中的關(guān)系    

  

    2.2.1 依賴關(guān)系(Dependency),用虛線加箭頭表示。如上圖動(dòng)物(Animal)依賴空氣(Air)。表示依賴關(guān)系的代碼有以下幾種

      1)作為參數(shù)

public class Air{public void GetOxygen() { Console.WriteLine("Get oxygen from air."); } } public abstract class Animal { /// <summary> /// 動(dòng)物依賴空氣才能呼吸,作為參數(shù)傳入 /// </summary> /// <param name="air"></param> public void Breathe(Air air) { air.GetOxygen(); } }

      2)在方法內(nèi)部定義    

/// <summary>/// 動(dòng)物依賴空氣才能呼吸,在方法內(nèi)部實(shí)例化新對(duì)象/// </summary> public void Breathe() { Air air = new Air(); air.GetOxygen(); }

      3)靜態(tài)方法調(diào)用

/// <summary>/// 在方法中調(diào)用靜態(tài)方法/// </summary> public void Test() { ClassName.UseStaticMethode(); }

    2.2.2 繼承關(guān)系(Inherit),用實(shí)線加空心箭頭表示,如上圖鷹(Eagle)繼承自動(dòng)物(Animal)    

/// <summary>/// 鷹繼承自Animal/// </summary> public class Eagle : Animal { }

    2.2.3 實(shí)現(xiàn)關(guān)系(Realize),用虛線加空心箭頭表示,如上圖鷹(Eagle)實(shí)現(xiàn)了飛行能力(IFlyAble)    

/// <summary>/// 鷹繼承自Animal/// </summary> public class Eagle : Animal, IFlyAble {         //實(shí)現(xiàn)IFlyAble接口中定義的方法 public void Fly() { Console.WriteLine("老鷹可以飛翔。"); } }

    2.2.4 組合關(guān)系,講組合關(guān)系之前不得不談關(guān)聯(lián)關(guān)系與聚合關(guān)系

      1)關(guān)聯(lián)關(guān)系(Association):對(duì)于兩個(gè)相對(duì)獨(dú)立的對(duì)象,當(dāng)一個(gè)對(duì)象實(shí)例與另一個(gè)對(duì)象的一些特定實(shí)例存在固定的對(duì)應(yīng)關(guān)系時(shí),這兩個(gè)對(duì)象之間的關(guān)系為關(guān)聯(lián)關(guān)系。例如:公司與員工的關(guān)系      

      

      代碼表現(xiàn),通過(guò)實(shí)例字段或?qū)傩詠?lái)實(shí)現(xiàn)

public class Emplolyee{public string Name{ get; set; }}public class Company { /// <summary> /// 一個(gè)公司可以有多個(gè)員工 /// </summary> private Emplolyee[] employees; }

      2) 聚合關(guān)系(Aggregate): 是關(guān)聯(lián)關(guān)系的一種,是一種較強(qiáng)的關(guān)聯(lián)關(guān)系,強(qiáng)調(diào)整體與部分之間的關(guān)系。例如:電腦與顯示器的關(guān)系,就是整體與部分的關(guān)系,即聚合關(guān)系      

      

      代碼表現(xiàn),也是通過(guò)實(shí)例字段或?qū)傩詠?lái)實(shí)現(xiàn)      

public class Displayer{/// <summary>/// 顯示器型號(hào) /// </summary> public string Model { get; set; } } public class Computer { /// <summary> /// 通過(guò)字段表示聚合關(guān)系 /// </summary> private Displayer displayer; }

      3)組合關(guān)系,組合關(guān)系是聚合的一種特殊形式,表示一個(gè)所有物實(shí)例不能同時(shí)被兩個(gè)所有物所擁有。如上例:鷹擁有一對(duì)翅膀,它的翅膀不能同時(shí)屬于別的鷹。

      代碼表現(xiàn),也是通過(guò)實(shí)例字段或?qū)傩詠?lái)實(shí)現(xiàn)      

public class Wing{}/// <summary>/// 鷹繼承自Animal /// </summary> public class Eagle : Animal, IFlyAble { private Wing leftWing; private Wing rightWing; public Eagle() { // 在構(gòu)造函數(shù)中實(shí)例化翅膀,防止翅膀被改變 leftWing = new Wing(); rightWing = new Wing(); } public void Fly() { Console.WriteLine("老鷹可以飛翔。"); } }

      關(guān)聯(lián)關(guān)系與聚合關(guān)系的區(qū)別: 關(guān)聯(lián)關(guān)系所涉及的兩個(gè)對(duì)象是處在同一個(gè)層次上的,比如程序員和計(jì)算機(jī)的關(guān)系就是一種關(guān)聯(lián)關(guān)系,而不是聚合關(guān)系,因?yàn)槌绦騿T不是由計(jì)算機(jī)組成的。聚合關(guān)系涉 及的兩個(gè)對(duì)象處于不平等的層次上,一個(gè)代表整體,一個(gè)代表部分。如計(jì)算機(jī)與顯示器的關(guān)系就是聚集關(guān)系,因?yàn)轱@示器是計(jì)算機(jī)的一部分。

      聚合關(guān)系與組合關(guān)系的區(qū)別:聚合關(guān)系中處于被持有的對(duì)象,可以被別的對(duì)象所持有。如多態(tài)計(jì)算機(jī)可以共享同一個(gè)顯示器。組合關(guān)系中被持有的對(duì)象只能被一個(gè)對(duì)象引用,不能共享給其它對(duì)象;而且被持有的對(duì)象的生命周期也由所有者控制,當(dāng)所有者析構(gòu)了,其所有物必須隨著它一起析構(gòu)。

轉(zhuǎn)載于:https://www.cnblogs.com/fly1027/p/4866366.html

總結(jié)

以上是生活随笔為你收集整理的设计模式学习笔记-基础知识篇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。