设计模式php版四_设计模式csdn
PHP有哪几种设计模式?
PHP 一般有五种常见的设计模式
工厂模式
工厂模式 是一种类,它具有为您创建对象的某些方法.您可以使用工厂类创建对象,而不直接使用 new.这样,如果您想要更改所创建的对象类型,只需更改该工厂即可.使用该工厂的所有代码会自动更改.
例如:
php
interface IUser
{
function getName();
}
class User implements IUser
public function __construct( $id ) { }
public function getName()
return "Jack";
class UserFactory
public static function Create( $id )
return new User( $id );
$uo = UserFactory::Create( 1 );
echo( $uo-getName()."\n" );
单元素模式
某些应用程序资源是独占的,因为有且只有一个此类型的资源.例如,通过数据库句柄到数据库的连接是独占的.您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销,在获取单个页面的过程中更是如此.
单元素模式可以满足此要求.如果应用程序每次包含且仅包含一个对象,那么这个对象就是一个单元素(Singleton).
require_once("DB.php");
class DatabaseConnection
public static function get()
static $db = null;
if ( $db == null )
$db = new DatabaseConnection();
return $db;
private $_handle = null;
private function __construct()
$dsn = 'mysql://root:password@localhost/photos';
$this-_handle = DB::Connect( $dsn, array() );
public function handle()
return $this-_handle;
print( "Handle = ".DatabaseConnection::get()-handle()."\n" );
观察者模式
观察者模式为您提供了避免组件之间紧密耦合的另一种方法.该模式非常简单:一个对象通过添加一个方法(该方法允许另一个对象,即观察者 注册自己)使本身变得可观察.当可观察的对象更改时,它会将消息发送到已注册的观察者.这些观察者使用该信息执行的操作与可观察的对象无关.结果是对象可以相互对话,而不必了解原因.
interface IObserver
function onChanged( $sender, $args );
interface IObservable
function addObserver( $observer );
class UserList implements IObservable
private $_observers = array();
public function addCustomer( $name )
foreach( $this-_observers as $obs )
$obs-onChanged( $this, $name );
public function addObserver( $observer )
$this-_observers []= $observer;
class UserListLogger implements IObserver
public function onChanged( $sender, $args )
echo( "'$args' added to user list\n" );
$ul = new UserList();
$ul-addObserver( new UserListLogger() );
$ul-addCustomer( "Jack" );
命令链模式
命令链 模式以松散耦合主题为基础,发送消息、命令和请求,或通过一组处理程序发送任意内容.每个处理程序都会自行判断自己能否处理请求.如果可以,该请求被处理,进程停止.您可以为系统添加或移除处理程序,而不影响其他处理程序.
interface ICommand
function onCommand( $name, $args );
class CommandChain
private $_commands = array();
public function addCommand( $cmd )
$this-_commands []= $cmd;
public function runCommand( $name, $args )
foreach( $this-_commands as $cmd )
if ( $cmd-onCommand( $name, $args ) )
return;
class UserCommand implements ICommand
public function onCommand( $name, $args )
if ( $name != 'addUser' ) return false;
echo( "UserCommand handling 'addUser'\n" );
return true;
class MailCommand implements ICommand
if ( $name != 'mail' ) return false;
echo( "MailCommand handling 'mail'\n" );
$cc = new CommandChain();
$cc-addCommand( new UserCommand() );
$cc-addCommand( new MailCommand() );
$cc-runCommand( 'addUser', null );
$cc-runCommand( 'mail', null );
策略模式
我们讲述的最后一个设计模式是策略 模式.在此模式中,算法是从复杂类提取的,因而可以方便地替换.例如,如果要更改搜索引擎中排列页的方法,则策略模式是一个不错的选择.思考一下搜索引擎的几个部分 —— 一部分遍历页面,一部分对每页排列,另一部分基于排列的结果排序.在复杂的示例中,这些部分都在同一个类中.通过使用策略模式,您可将排列部分放入另一个类中,以便更改页排列的方式,而不影响搜索引擎的其余代码.
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
class UserList
private $_list = array();
public function __construct( $names )
if ( $names != null )
foreach( $names as $name )
$this-_list []= $name;
public function add( $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 );
PHP设计模式有哪些
①工厂模式工厂模式是一种类,它具有为您创建对象的某些方法.您可以使用工厂类创建对象,而不直接使用 new.这样,如果您想要更改所创建的对象类型,只需更改该工厂即可.使用该工厂的所有代码会自动更改.
观察者模式为您提供了避免组件之间紧密耦合的另一种方法.该模式非常简单:一个对象通过添加一个方法(该方法允许另一个对象,即观察者 注册自己)使本身变得可观察.当可观察的对象更改时,它会将消息发送到已注册的观察者.这些观察者使用该信息执行的操作与可观察的对象无关.结果是对象可 以相互对话,而不必了解原因.
我们讲述的最后一个设计模式是策略 模式.在此模式中,算法是从复杂类提取的,因而可以方便地替换.例如,如果要更改搜索引擎中排列页的方法,则策略模式是一个不错的选择.思考一下搜索引擎 的几个部分 —— 一部分遍历页面,一部分对每页排列,另一部分基于排列的结果排序.在复杂的示例中,这些部分都在同一个类中.通过使用策略模式,您可将排列部分放入另一个 类中,以便更改页排列的方式,而不影响搜索引擎的其余代码.
php中有哪些设计模式,举例说明应用场景
它具有创建对象的某些方法.可以使用工厂类创建对象,而不直接使用 new.
另外四种是:观察者模式,单元素模式,命令链模式,策略模式.例子可以百度一搜.
以上就是泓通小常识小编为大家整理的设计模式php版四相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!