php設計モード-ポリシーモード
このモードでは、アルゴリズムは複雑なクラスから抽出されるため、容易に置き換えることができる.たとえば、検索エンジンでページを並べ替える方法を変更する場合は、ポリシー・モードが良い選択です.検索エンジンのいくつかの部分を考えてみましょう.一部はページを巡り、一部はページごとに並べ、もう一部は並べ替えの結果に基づいて並べ替えられます.複雑な例では、これらの部分は同じクラスにあります.ポリシー・モードを使用すると、検索エンジンの残りのコードに影響を与えることなく、別のクラスに配置セクションを挿入して、ページの配置方法を変更できます.
簡単な例として、プラグアンドプレイのポリシーのセットに基づいてユーザーのセットを検索する方法を提供するユーザーリストクラスが表示されます.
Strategy.php
簡単な例として、プラグアンドプレイのポリシーのセットに基づいてユーザーのセットを検索する方法を提供するユーザーリストクラスが表示されます.
Strategy.php
<?php
interface IStrategy
{
function filter( $record );
}
class FindAfterStrategy implements IStrategy
{
private $_name;
public function __construct( $name )
{
$this->_name = $name;
}
public function filter( $record )
{
return strcmp( $this->_name, $record ) <= 0;
}
}
class RandomStrategy implements IStrategy
{
public function filter( $record )
{
return rand( 0, 1 ) >= 0.5;
}
}
class UserList
{
private $_list = array();
public function __construct( $names )
{
if ( $names != null )
{
foreach( $names as $name )
{
$this->_list []= $name;
}
}
}
public function add( $name )
{
$this->_list []= $name;
}
public function find( $filter )
{
$recs = array();
foreach( $this->_list as $user )
{
if ( $filter->filter( $user ) )
$recs []= $user;
}
return $recs;
}
}
$ul = new UserList( array( "Andy", "Jack", "Lori", "Megan" ) );
$f1 = $ul->find( new FindAfterStrategy( "J" ) );
print_r( $f1 );
$f2 = $ul->find( new RandomStrategy() );
print_r( $f2 );
?>