Rust語言之GoF設計模式:靜態工廠
靜態建立方法是一個Rust 關聯函式 ,它返回一個新物件,該物件通常是該特定型別的例項。
在傳統的OO語言中如Java有一個“建構函式”的概念,它是建立物件的預設類方法。
但是在Rust中“建構函式”被丟棄,因為都可以使用用靜態建立方法實現。
猜猜這是什麼模式:
impl Circle { pub fn new(radius: u32) -> Circle { Self { radius } } } |
它就是靜態建立方法 (工廠方法的一個小親戚)
在典型的建構函式習語中,沒有辦法優雅地處理構造錯誤,構造程式碼的複雜性也存在限制。
但是,如果都使用靜態方式,則可以有任意數量的具有任何複雜邏輯的靜態方法,例如從資料庫載入。
有幾種方法可以定義靜態建立方法。
1、default():
來自 Default trait 的無引數構造方法。使用 default#[derive(Default)]或手動 trait 實現。
#[derive(Default)] struct Circle; let circle = Circle::default(); |
2. 帶有引數的自定義物件建立的手寫new()方法:
impl Rectangle { pub fn new(width: u32, length: u32) -> Rectangle { Self { width, length } } } let rectangle = Rectangle::new(10, 20); |
3、from_
從自定義物件構造的字首方法(您可以使用任何名稱,但是,這是一種命名約定)。
let circle = Circle::from_shape(shape, 10, 20); |
4. 實現From<>
實現已知型別構造trait:
impl From<PriceData> for FormattedData { fn from(price: PriceData) -> FormattedData { FormattedData { text: format!("{} {}", price.one, price.two), } } } let formatted_data = price_data.into(); |
原型模式:
#[derive(Clone)] struct Rectangle { width, height: u32, } let rectangle1 = Rectangle::new(10, 20); let mut rectangle2 = rectangle1.clone(); rectangle2.set_width(50); |
它是一個原型,一種建立模式,允許您複製現有物件而不依賴於它們的型別。
Rust 有許多型別的標準Clone實現(透過#[derive(Clone)]),這使得 Prototype 易於使用且無縫。
相關文章
- Rust語言之GoF設計模式:工廠模式RustGo設計模式
- Rust語言之GoF設計模式:抽象工廠模式RustGo設計模式抽象
- Rust語言之GoF設計模式: 模板方法模式RustGo設計模式
- Rust語言之GoF設計模式:原型模式RustGo設計模式原型
- Rust語言之GoF設計模式:迭代器模式RustGo設計模式
- Rust語言之GoF設計模式:Flyweight享元模式RustGo設計模式
- Rust語言之GoF設計模式:責任鏈模式RustGo設計模式
- Rust語言之GoF設計模式:中介者Mediator模式RustGo設計模式
- Rust語言之GoF設計模式:備忘錄Memento模式RustGo設計模式
- Rust語言之GoF設計模式: 直譯器Interpreter模式RustGo設計模式
- Rust語言之GoF設計模式:介面卡AdapterRustGo設計模式APT
- 設計模式——簡單工廠(又叫靜態工廠方法,不屬於GOF23中設計模式)設計模式Go
- 設計模式-靜態工廠模式設計模式
- Yii2設計模式——靜態工廠模式設計模式
- GoF之工廠模式Go模式
- 設計模式——從介面的角度切入靜態工廠模式設計模式
- 設計模式-工廠模式二(工廠方法模式)設計模式
- 設計模式----工廠設計模式設計模式
- 設計模式-工廠設計模式設計模式
- 設計模式 —— 工廠模式設計模式
- 設計模式(工廠模式)設計模式
- 設計模式----工廠模式設計模式
- 【設計模式】工廠模式設計模式
- 設計模式-工廠模式設計模式
- 設計模式-簡單工廠、工廠方法模式、抽象工廠模式設計模式抽象
- C# 設計模式(1)——簡單工廠模式、工廠模式、抽象工廠模式C#設計模式抽象
- 設計模式學習(二)工廠模式——抽象工廠模式設計模式抽象
- 設計模式 - 工廠方法模式設計模式
- 設計模式 —— 抽象工廠模式設計模式抽象
- 設計模式-抽象工廠模式設計模式抽象
- Java 設計模式(工廠模式)Java設計模式
- PHP設計模式-- 工廠模式PHP設計模式
- 【設計模式】工廠方法模式設計模式
- 設計模式 #2 (工廠模式)設計模式
- java設計模式 – 工廠模式Java設計模式
- 設計模式~~~工廠方法模式設計模式
- 設計模式——抽象工廠模式設計模式抽象
- Java設計模式(工廠模式)Java設計模式