設計模式 (二)策略模式

2021-09-11 14:03:54 字數 1548 閱讀 7381

策略模式

<?php 

/*** abstract class

*/abstract class strategy

/*** 演算法a

*/class concretestrategya extends strategy

}/**

* 演算法b

*/class concretestrategyb extends strategy

}/**

* 演算法c

*/class concretestrategyc extends strategy

}/**

* 上下文context

*/class context

public function contextinte***ce()

}$context = new context(new concretestrategya());

$context->contextinte***ce();

$context = new context(new concretestrategyb());

$context->contextinte***ce();

$context = new context(new concretestrategyc());

$context->contextinte***ce();

策略模式和簡單工廠結合
<?php

// 只需要修改上方的context類

class context

}public function contextinte***ce()

}//客戶端**

$context = new context('a');

$context->contextinte***ce();

總結
物件導向的程式設計,並不是類越多越好,類的劃分為了封裝,但分類的基礎是抽象,具有相同屬性和功能的物件集合才是類。

策略模式是一種定義一系列演算法的方法,從概念上來看,所有這些演算法完成的都是相同的工作,只是實現不同,它可以以相同的方式呼叫所有的演算法,減少了各種演算法類與使用演算法類之間的耦合。

策略模式的strategy類層次為context定義了一系列的可供重用的演算法或行為。繼承有助於析取出這些演算法中公共功能。

策略模式簡化了單元測試,因為每個演算法都有自己的類,可以通自己介面單獨測試。

當不同的行為堆砌在乙個類中時,就很難避免使用條件語句來選擇合適的行為。將這些行為封裝在乙個個strategy類中,可以在使用這些行為的類中消除條件語句。

策略模式就是用來封裝演算法的,但在實踐中,我們發現可以用它來封裝幾乎任何型別的規則,只要在分析過程中聽到需要在不同時間應用不同的業務規則,就可以考慮使用策略模式處理這種變化的可能性。

在基本的策略模式中,選擇所用具體實現的職責由客戶端物件承擔,並轉給策略模式的context物件。

設計模式 二 策略模式

定義演算法家族,分別封裝起來,讓它們之間可以互相替換,讓演算法變化,不會影響到使用者 good 適合類中的成員以方法為主,演算法經常變動 簡化了單元測試 因為每個演算法都有自己的類,可以通過自己的介面單獨測試。策略模式和簡單工廠基本相同,但簡單工廠模式只能解決物件建立問題,對於經常變動的演算法應使用...

設計模式(二) 策略模式

策略模式 strategy 它定義了乙個演算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。現金收費抽象類 abstract class cashsuper 正常收費子類 class cashnormal cashsuper 打折收費子類 class ...

設計模式(二) 策略模式

策略模式定義了演算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。我們來實現乙個簡單的商場收銀軟體功能來闡述策略模式 1.我們先來定義乙個收費方式的基類,如下 using system namespace strategy 2.收費方案,如下 usin...