最近工作使用到设计模式,在选用设计模式的时候,发觉设计模式理解不难,难的是在某个场景下选用哪个设计模式。就是设计模式的使用场景。
策略模式
策略模式适用情况是你已经知道了某个算法。第一步做什么,第二步做什么,第三步做什么。但是具体的三步在不同场景怎么做有不同的行为。
代码举例:
<?php
abstract Database
{
abstract public function showTables();
abstract public function showEngine();
}
class Content
{
private $dabatase;
public function setDatabase(Database $database) {
$this->database = $database;
}
public function Print() {
$tables = $this->database->showTables();
$engine = $this->database->showEngine();
return [
'table' => $tables,
'engine' => $engine
];
}
}
class MysqlDatabase implements Database
{
public function showTables() {
return ['mysql1', 'mysql2'];
}
public function showEngine() {
return ['innodb', 'myisam'];
}
}
class PgDatabase implements Database
{
public function showTables() {
return ['pg1', 'pg2'];
}
public function showEngine() {
return ['pginno1', 'pginno2'];
}
}
$content = new Content();
$content->setDatabase(new MysqlDatabase());
$content->Print();
策略模式属于行为型模式。行为型模式主要是区分算法流程和对象的职责分配。在策略模式中,对象类界定对象行为。策略类界定算法流程。
一句话:策略模式适用于已知算法流程的行为场景。