コードをコピー コードは次のとおりです:
/**
* 装飾モード
*
* オブジェクトに追加の責任を動的に追加します。これは、拡張機能の点でサブクラスを生成するよりも柔軟です
*/
header(" Content-type:text/html;charset=utf-8");
抽象クラス MessageBoardHandler
{
パブリック関数 __construct(){}
抽象パブリック関数フィルター($msg) ;
}
class MessageBoard extends MessageBoardHandler
{
public function filter($msg)
{
return "メッセージボードのコンテンツを処理します|".$msg ;
}
}
$obj = new MessageBoard();
echo $obj->filter("装飾モードを必ず学習してください
");
// --- 以下はデコレーション モードの使用法です ----
class MessageBoardDecorator extends MessageBoardHandler
{
private $_handler = null; function __construct($handler)
{
parent::__construct();
$this->_handler = $handler;
パブリック関数フィルター($msg)
{
return $this->handler->filter($msg);
}
}
// フィルタ html
class HtmlFilter extends MessageBoardDecorator
{
パブリック関数 __construct ($handler)
{
parent::__construct($handler)
}
パブリック関数 filter($msg)
; 🎜>return "Filter out HTML tags |".parent::filter($msg);; // この時点では処理を行わずにテキストを追加するだけです。
}
}
// 機密性の高い単語をフィルターします
class SensitiveFilter extends MessageBoardDecorator
{
public function __construct($handler)
{
parent::__construct($handler)
}
public function filter( $msg)
{
return "センシティブな単語をフィルタリング|".parent::filter($msg); // センシティブな単語をフィルタリングする処理は追加するだけです現時点では処理されていないテキスト
}
}
$obj = new HtmlFilter(new SensitiveFilter(new MessageBoard()));
echo $obj->filter("必ずデコレーション モードを学ぶには!
" );