设计模式实例

单例模式

单例模式,使应用中只存在一个对象的实例,并且使这个单实例负责所有对该对象的调用.常用实例:数据库连接/记录日志

以数据库连接为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

<?php
class Databases
{
private $db;

private function __construct()
{

}

static public function getInstance()
{
if(empty(self::$db)) {
self::$db = new self;
return self::$db;
} else {
return self::$db;
}
}

public function query($sql)
{
//echo $sql;
}
}



//$conn = Databases::getInstance();
?>

策略模式

策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

封装:把行为用接口封装起来,我们可以把那些经常变化的部分,从当前的类中单独取出来,用接口进行单独的封装。

互相替换:我们封装好了接口,通过指定不同的接口实现类进行算法的变化。

策略模式的应用场景:比如根据不同的浏览器展示不同的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

<?php
//Browser.pph
namespace Strategy;
abstract class Browser {
abstract function showText();

}
?>

<?php
//Chrome.php
namespace Strategy;
class ChromeBrowser extends Browser {
public function showText()
{
return "This is chrome text";
}

}
?>

<?php
//IE.php
namespace Strategy;
class IeBrowser extends Browser {
public function showText()
{
return "This is IE text";
}
}
?>




<?php
//Index.php 最终用法
class Index{
public function call(\Strategy\Browser $object)
{
return $object->showText();

}
}

if($_GET['agent'] == "ie") {
$browser = new \Strategy\IeBrowser();
} else {
$browser = new \Strategy\ChromeBrowser();
}
$obj = new Index();
echo $obj->call($browser);
?>

#工厂模式
正在补充