簡體   English   中英

策略設計模式和實現行為的區別

[英]Diffrences between Strategy design pattern and implement behaivour

我研究了策略設計模式,據我所知,有一種非常相似的方式來實現對象的“行為”。

一種方法是策略設計模式。 通過這種方式,對象“具有”代表行為的策略。

另一種方法是讓這個對象“實現”行為(接口)。

例如,在游戲中,我有“敵人”對象,一個敵人在飛行,一個在駕駛。 所以到現在為止,我會想:第一個“敵人”對象實現了 Flyable,第二個“敵人”對象實現了 Drivable。 但另一個解決方案可以是第一個 Enemy 'has-a' FlyingStrategy 和第二個 'has-a' DrivingStrategy。

我試圖在良好的設計方面找到更好的解決方案。

謝謝。

它們不可互換。 一個很好的例子是 JDK 中的Comparable vs Comparator

在您的情況下, Comparable代表實現接口設計。 Comparator是策略模式的一個例子。 使用Collections.sort的兩個簽名,你可以做到這一點

Collections.sort(listOfComparables);

或這個

Collections.sort(anyList, comparator);

假設您有一個Car列表。 您可能希望按顏色、座位數和馬力對列表進行排序。 在這種情況下,實現Comparable是沒有意義的。 汽車沒有自然排序; 通過實現接口來優先考慮一種排序而不是另一種排序是沒有意義的。 在這種情況下,所有的排序都是平等的。 如果您將汽車聲明為Comparable那么對於您班級的用戶來說可能不是很直觀。 他們可能必須檢查實現或文檔才能確定您想要的順序。 您應該使用Comparator對它們進行排序。

現在假設您有一個Coin列表。 硬幣有一個相當明顯的自然順序:它們的面值。 您可以按大小或重量對硬幣進行分類,但它們存在的主要原因是代表不同的面額。 在這種情況下,並非所有的排序都是平等的。 在這里實現Comparable有意義的,如果需要其他排序,您可以使用Comparator

從更一般的意義上講,當沒有一種“首選”方法時,通常最好應用策略模式。 一個類只能實現一個接口一次,但它可能能夠使用許多不同的策略。 這是一種控制反轉

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM