策略模式
2017-03-14 07:43 轩脉刃 阅读(546) 评论(0) 编辑 收藏 举报最近工作使用到设计模式,在选用设计模式的时候,发觉设计模式理解不难,难的是在某个场景下选用哪个设计模式。就是设计模式的使用场景。
策略模式
策略模式适用情况是你已经知道了某个算法。第一步做什么,第二步做什么,第三步做什么。但是具体的三步在不同场景怎么做有不同的行为。
代码举例:
<?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();
策略模式属于行为型模式。行为型模式主要是区分算法流程和对象的职责分配。在策略模式中,对象类界定对象行为。策略类界定算法流程。
一句话:策略模式适用于已知算法流程的行为场景。
实时了解作者更多技术文章,技术心得,请关注微信公众号“轩脉刃的刀光剑影”
本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,但是必须保留本文的署名叶剑峰(包含链接http://www.cnblogs.com/yjf512/),且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系。