策略模式
<?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...