設計模式開篇(一)

來源:互聯網
上載者:User

已經有很多前輩寫過關於設計模式的很多經典文章,我在這裡記錄一些自己的學習進程,表示自己還在學習好了。

先從借來的大話設計模式看起,今天是第一章和第二章。

第一章 簡單uml 

uml中繼承很容易記住。

說些不怎麼好記住的,如 依賴 ,關聯 ,彙總,組合 。

依賴用 虛線箭頭表示,在代碼上是類的方法用到(傳入或引用)了 被依賴的類。

關聯:有名的客戶和訂單的關係以及公司和員工的關係,都是關聯關係。還有就是我和我的單車的例子,他們都是一種“擁有”的關係。表現在代碼上,就是一個類包含另一個類的執行個體,通常表現為被關聯類別以類屬性的形式出現在關聯類別的類定義中,也可以表現為關聯類別引用了一個類型為被關聯類別的全域變數。關聯可以使單向的,也可以使雙向的。

public class Company{    private Employee employee;    public Employee GetEmployee()    {        return employee;    }    public void SetEmployee(Employee employee)    {        this.employee = employee;    }    //公司運作        public void Run()    {        employee.StartWorking();    }}


彙總

彙總(aggregation)是一種特殊的聯絡,它表明了“部分”到“整體”的關係,顯著的特點就是不能包含迴圈的聯絡(就是說,部分中不能包含整體)。如:

class
Node
{
private:
vector<Node*> itsNodes;
};

上述代碼只有當子節點不會成為父節點的父節點時(即,必須是樹結構,不能是圖結構),才能稱之為彙總。

組合

組合(composition)跟彙總幾乎相同,唯一的區別就是“部分”不能脫離“整體”單獨存在,就是說, “部分”的生命期不能比“整體”還要長。例如:

class Car
{
public:
virtual ~Car() {delete itsCarb;}
private:
Carburetor* itsCarb
};

彙總和組合區別:用C++程式的話,彙總就像是類中的指標成員,而組合就是類中的成員。需要該類來建立對象。//這裡說的應該不是很準確

關聯與依賴的區別:有說“關聯本身即是一種依賴”,亦有說“依賴是一種弱關聯”,其實說來說去是一檔子事。依賴和關聯都是說一個類用到了另一個類。其區別在於一個是使用,一個是擁有。

關聯和彙總 的區別是: 彙總是一對多的。而關聯貌似是一對一的。 關聯只有一個類知道另外一個類的公用屬性和操作。包含了另一個對象的引用。
而彙總則是擁有被彙總類的指標,要在非成員方法裡面使用。

總結一下:

依賴、關聯、彙總、組合、繼承、實現
耦合度依次提高。

區分心法:

1.成員變數中沒有B類,方法中使用,則為依賴。

2.成員變數中有B類的引用或指標,並不參與B對象的構建,則是關聯。

3.成員變數中有B類的指標,方法中使用,則是彙總關係。

4.成員變數或建構函式中有B類的實現對象,則是組合。

第二章 原廠模式和策略模式

原廠模式用到的是依賴模式的關係。


而策略模式用到的是彙總模式。


        策 略模式是一種第一一系列演算法的方法,從概念上來看,所有這些演算法完成的都是相同的工作,只是實現不同,可以以相同的方式調用所有的演算法,減少了各種演算法類與使用演算法類之間的耦合。並且繼承類有助於定義一系列可供重複用的演算法或行為。每個演算法都有自己單獨的類可以單獨測試。

        與工廠結合可以簡化用戶端,將具體的實現轉移到策略模式中。

聯繫我們

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