1、单例模式
一个类,只能允许有一个对象存在
<?php
class test{
protected function __construct(){
}
public static function getInstance(){
$_test = new test();
return $_test;
}
}
$test = test::getInstance();
var_dump($test);
?>
2、工厂模式
工厂模式,顾名思义,如同工厂一样,你把原材料放入工厂中,出来的是成品,而你并不需要知道工厂里做了什么,工厂模式主要用于解耦。
把对象的创建和使用的过程分开,比如: ClassA 调用 ClassB,那么 ClassA 只调用ClassB 的方法,
至于实例化 ClassB 则在工厂内实现。这样既减少了代码的重复使用,也方便对 ClassB 的后期维护。
如果 ClassB 实例化过程很复杂,使用简单工厂模式就会发现外部无需关注复杂的实例化,只管调用 ClassB 的方法即可,减少错误
interface mysql{
public function connect();
}
class mysqli2 implements mysql{
public function connect(){
echo 'mysqli';
}
}
class pdo2 implements mysql{
public function connect(){
echo 'pdo';
}
}
class mysqlFactory{
static public function factory($class_name){
return new $class_name();
}
}
$obj = mysqlFactory::factory('pdo2');
$obj->connect();
3、注册模式
注册模式,解决全局共享和交换对象。已经创建好的对象,挂在到某个全局可以使用的数组上,
在需要使用的时候,直接从该数组上获取即可。将对象注册到全局的树上。任何地方直接去访问。
<?php
class Register
{
protected static $objects;
function set($alias,$object)//将对象注册到全局的树上
{
self::$objects[$alias]=$object;//将对象放到树上
}
static function get($name){
return self::$objects[$name];//获取某个注册到树上的对象
}
function _unset($alias)
{
unset(self::$objects[$alias]);//移除某个注册到树上的对象。
}
}
AutoRegister::set('single',$single);
$single = AutoRegister::get('single');
var_dump($single);
4、适配器模式
将一个类的接口转换成客户希望的另外一个接口。
//目标角色
interface Aims
{
public function newMethod1();
public function newMethod2();
}
//需要被适配的类(Adaptee)
Class Man
{
public function oldMethod1()
{
echo 'man';
}
public function oldMethod2()
{
echo '男人';
}
}
//需要被适配的类(Adaptee)
Class Woman
{
public function oldMethod1()
{
echo 'woman';
}
public function oldMethod2()
{
echo '女人';
}
}
//适配器,
Class Adapters implements Aims
{
private $adaptee;
public function __construct($adaptee)
{
$this->adaptee = $adaptee;
}
public function newMethod1()
{
//以少量的代码对被适配者作出适配
echo 'sex :';
$this->adaptee->oldMethod1();
}
public function newMethod2()
{
echo 'sex name :';
$this->adaptee->oldMethod2();
}
}
$adapter1 = new Adapters(new Man);
$adapter1->newMethod1();
$adapter2 = new Adapters(new Woman);
$adapter2->newMethod2();







