design-patterns-rust - 23 の古典的な GoF デザイン パターンすべての Rust の例、およびその他のパタ​​ーン

(Rust examples for all 23 classic GoF design patterns, and even a little more)

Created at: 2022-07-20 00:53:16
Language: Rust
License: NOASSERTION

Rustのデザインパターン

Rustのデザインパターン

このリポジトリにはRustが含まれています 🦀23 の古典的な GoF デザイン パターンすべての例と、それ以上の例です。

すべての例は、 Rust言語での実用的な適用性を紹介するように設計されています。概念的な例と実際の例があります。どちらの場合も、コード開発の Rust の慣用的な方法とすべての詳細が考慮されます。

リポジトリは、 Refactoring.Guruプロジェクトの一部として開発されています。

🔧要件

これらの例は、安定

rustc 1.62
版 (2021 年版)でテストされています。

cargo
すべての例は、次のようにコマンド ラインから起動できます。

cargo run --bin adapter

Cargo.toml
各ターゲット名は、各例で見つけることができます。

[[bin]]
name = "adapter"
path = "main.rs"

また、例には、手順と追加の説明を含むREADME.mdが含まれています。

事例一覧

cargo run --bin chain-of-responsibility
cargo run --bin command
cargo run --bin iterator
cargo run --bin mediator
cargo run --bin memento
cargo run --bin memento-serde
cargo run --bin observer
cargo run --bin state
cargo run --bin strategy
cargo run --bin strategy-func
cargo run --bin template-method
cargo run --bin visitor
cargo run --bin abstract-factory
cargo run --bin abstract-factory-dyn
cargo run --bin builder
cargo run --bin factory-method-maze-game
cargo run --bin factory-method-render-dialog
cargo run --bin prototype
cargo run --bin simple-factory
cargo run --bin singleton
cargo run --bin singleton-lazy
cargo run --bin singleton-mutex # Requires Rust 1.63
cargo run --bin static-creation-method
cargo run --bin adapter
cargo run --bin bridge
cargo run --bin composite
cargo run --bin decorator
cargo run --bin facade
cargo run --bin flyweight
cargo run --bin proxy

一部の例には視覚的な出力があります。

フライ級 指示

💡ノート

興味深いことに、Rust では:

  1. ほとんどすべての構造パターンと作成パターンはジェネリックを使用して実装できるため、静的ディスパッチが使用されます。
  2. ほとんどの動作パターンは、静的ディスパッチを使用して実装することはできません。代わりに、動的ディスパッチを介してのみ実装できます。

「動作」は本質的に動的であり、「構造」は静的であるため、よく考えられたパターン分類は Rust 言語の設計に完全に適合します。

一部のパターンは Rust で実装するのが非常に簡単で、ほとんどが 作成的なものです。たとえば 、 PrototypeStatic Creation Methodなどです。

厳密な借用チェッカー ルールを使用した Rust 固有の所有権モデルを考慮すると、Mediator 動作パターンは Rust で実装するのが最も困難です

ライセンス

この作品は、Creative Commons Attribution-NonCommercial-No Derivatives 4.0 International License の下でライセンスされています。

クリエイティブ・コモンズ・ライセンス

クレジット

著者: Alexander Fadeev ( @fadeevab )。