設計模式深入學習 Prototype原型模式

2021-07-26 08:03:18 字數 2584 閱讀 2130

今天我們繼續來聊下

prototype原型模式。這篇應該是關於工廠設計模式的最後一篇。下次就往內部講解結構型別的設計模式。

首先我們說下prototype原型模式的用法。

prototype原型模式主要是用來處理依賴關係的倒置。 比如抽象a類依賴了實現細節b:

拿我們上個帖子舉例,

比如我們的小車依賴於汽油發動機。 但是當我們的小車不使用汽油發動機,改用電動了,那這時候修改起來就比較痛苦了。所以我們採用抽象a依賴於抽象b,

實現細節b依賴於抽象b。

那現在 我們的小車就依賴於抽象類發動機,然後不管電動還是汽油發動機都依賴於抽象類發動機。

下面來看點**的具體實現。 假設我們現在做一套機械人ai。那麼機械人分為普通機械人,飛行機械人,水下機械人。那麼我們先來製作這些機械人原型,

來體現出我們的

prototype原型模式的用法。

public abstract class normalrobot

首先我們宣告乙個抽象類 普通機械人。 然後這個普通機械人有乙個抽象的clone方法,並返回這個抽象類。接下來再來寫2個原型類。

public class normalrobota : normalrobot  }

public class normalrobotb : normalrobot

}

現在我們又構建了2個ab號的普通機械人。重寫了clone方法。這裡提一下 

this.memberwiseclone();

使用的是.net的乙個深度複製方法,目的就是要把我們的原型,

好,那我們現在普通機械人的原型做好了,我們再來加上飛行機械人和水下機械人,然後再來說用法。

public abstract class flyrobot

public class flyrobota : flyrobot

}public class flyrobotb : flyrobot}

public abstract class waterrobot

public class waterrobota : waterrobot

}public class waterrobotb : waterrobot

}

好,現在我們再來寫乙個構造器 目的就是呼叫這3種機械人型別。  

public class gamesystem

}

可以看到,構造器主要是傳3個引數,分別就是機械人的抽象類。然後在類裡面重新new出3個抽象類來接收這些引數。然後使用引數的.clone方法來賦值。

好,最後我們來寫這個啟動**,來呼叫這個構造器並且傳輸引數試試。

class program

}

可以看到,在main函式中,我先new了乙個構造器,然後分別往構造器傳輸 普通機械人a,飛行機械人a,水下機械人b。然後我們執行就可以看到每個型別的機械人

都響應了。

這個就是

prototype原型模式的設計運用,他的好處就是使用乙個原型來作為基礎引數構造,然後通過構造的過程可以隨意修改,解決了在製作的過程中修改抽象類而具體實現類不需要改變的耦合性。比如說這個時候我們的飛行機械人加了c型別,那麼我們就可以在寫乙個新的飛行機械人c類,繼承自飛行機械人抽象類,然後把這個飛行機械人c類實現好後,就可以修改下啟動函式的飛行機械人c類傳入構造器就可以了,是不是特別方便呢。

我們再來看看

prototype原型模式的幾個設計要點。

prototype設計模式同樣用於隔離類物件的使用者和具體型別(易變類)之間的耦合關係,它同樣要求這些"易變類"擁有"穩定的介面"。

prototype設計模式對於"如何建立易變類的實體物件"採用"原型轉殖"的方法來做,它使得我們可以非常靈活地動態建立"擁有某些穩定介面"的新物件--所需工作僅僅是註冊乙個新類的物件(即原型),然後在任何需要的地方不斷地clone。

prototype設計模式中的clone方法可以利用.net中的object類中的memberwiseclone()方法或者序列化來實現深度複製。

最後再來回顧下我們全部的工廠設計模式的方案。

singleton模式解決的是實體物件個數的問題。除了singleton之外,其他建立型模式解決的都是new所帶來的耦合關係。

factory method,abstractfactory,builder都需要乙個額外的工廠類來負責例項化"易變物件",而prototype則是通過原型(乙個特殊的工廠類)來轉殖"易變物件"

如果遇到"易變類",起初的設計通常從factory method開始,當遇到更多的複雜變化時,再考慮重構為其他三種工廠模式(abstract factory,builder,prototype

).

設計模式之深入學習

如何高效學習?成為了現代每個人必備的能力,我們需要培養的是思維模型,套路,模式,高效學習方法。有了這些,以後不管學習什麼,都會很輕鬆。就像李笑來老師的學習學習再學習,就是說要先學會學習,再去學習,為了學習知識而學習已經是孔子老師那個年代的事情了 最近抽時間在重新看設計模式,應用到了一些方法,再次分享...

設計模式單例深入學習

1.單例模式有5種寫法 1.1分為 普通寫法 執行緒方法加鎖 懶漢式 執行緒方法內部加鎖 靜態屬性初始化類 餓漢式 內部類初始化。1.2懶漢式 在使用的時候建立 餓漢式 在類初始化的時候建立。1.3第3個叫做雙重檢查加鎖。1.4加鎖2種 synchronized加在方法上 synchronized加...

深入學習《大話設計模式》 簡單工廠模式

定義 封裝改變,既然要封裝改變,自然也就要找到需要更改的 然後將需要更改的 用類來封裝,這樣的思路就是我們簡單工廠模式的實現方式了 下面我們通過一則小故事來簡述一下我們在專案中為什麼要使用簡單工廠模式 示例 呼叫方class program 建立資料庫工廠,用來返回資料庫例項 資料庫工廠 publi...