<?php
/**
* Singleton of Database
*/
class Database
{
// We need a static private variable to store a Database instance.
privatestatic $instance;
// Mark as private to prevent it from being instanced.
privatefunction__construct()
{
// Do nothing.
}
privatefunction__clone()
{
// Do nothing.
}
publicstatic functiongetInstance()
{
if (!(self::$instanceinstanceofself)) {
self::$instance = newself();
}
returnself::$instance;
}
}
$a =Database::getInstance();
$b =Database::getInstance();
// true
var_dump($a === $b);
<?php
interfaceInterfaceShape
{
functiongetArea();
functiongetCircumference();
}
/**
* 矩形
*/
class Rectangle implementsInterfaceShape
{
private $width;
private $height;
publicfunction__construct($width, $height)
{
$this->width = $width;
$this->height = $height;
}
publicfunctiongetArea()
{
return $this->width* $this->height;
}
publicfunctiongetCircumference()
{
return 2 * $this->width + 2 * $this->height;
}
}
/**
* 圆形
*/
class Circle implementsInterfaceShape
{
private $radius;
function__construct($radius)
{
$this->radius = $radius;
}
publicfunctiongetArea()
{
return M_PI * pow($this->radius, 2);
}
publicfunctiongetCircumference()
{
return 2 * M_PI * $this->radius;
}
}
/**
* 形状工厂类
*/
class FactoryShape
{
publicstatic functioncreate()
{
switch (func_num_args()) {
case1:
return newCircle(func_get_arg(0));
case2:
return newRectangle(func_get_arg(0), func_get_arg(1));
default:
# code...
break;
}
}
}
$rect =FactoryShape::create(5, 5);
// object(Rectangle)#1 (2) { ["width":"Rectangle":private]=> int(5) ["height":"Rectangle":private]=> int(5) }
var_dump($rect);
echo "<br>";
// object(Circle)#2 (1) { ["radius":"Circle":private]=> int(4) }
$circle =FactoryShape::create(4);
var_dump($circle);
<?php
/*
观察者接口
*/
interfaceInterfaceObserver
{
functiononListen($sender, $args);
functiongetObserverName();
}
// 可被观察者接口
interfaceInterfaceObservable
{
functionaddObserver($observer);
functionremoveObserver($observer_name);
}
// 观察者抽象类
abstractclass Observer implementsInterfaceObserver
{
protected $observer_name;
functiongetObserverName()
{
return $this->observer_name;
}
functiononListen($sender, $args)
{
}
}
// 可被观察类
abstractclass Observable implementsInterfaceObservable
{
protected $observers = array();
publicfunctionaddObserver($observer)
{
if ($observerinstanceofInterfaceObserver)
{
$this->observers[] = $observer;
}
}
publicfunctionremoveObserver($observer_name)
{
foreach ($this->observersas $index => $observer)
{
if ($observer->getObserverName() === $observer_name)
{
array_splice($this->observers, $index, 1);
return;
}
}
}
}
// 模拟一个可以被观察的类
class A extendsObservable
{
publicfunctionaddListener($listener)
{
foreach ($this->observersas $observer)
{
$observer->onListen($this, $listener);
}
}
}
// 模拟一个观察者类
class B extendsObserver
{
protected $observer_name = 'B';
publicfunctiononListen($sender, $args)
{
var_dump($sender);
echo "<br>";
var_dump($args);
echo "<br>";
}
}
// 模拟另外一个观察者类
class C extendsObserver
{
protected $observer_name = 'C';
publicfunctiononListen($sender, $args)
{
var_dump($sender);
echo "<br>";
var_dump($args);
echo "<br>";
}
}
$a = new A();
// 注入观察者
$a->addObserver(new B());
$a->addObserver(new C());
// 可以看到观察到的信息
$a->addListener('D');
// 移除观察者
$a->removeObserver('B');
// 打印的信息:
// object(A)#1 (1) { ["observers":protected]=> array(2) { [0]=> object(B)#2 (1) { ["observer_name":protected]=> string(1) "B" } [1]=> object(C)#3 (1) { ["observer_name":protected]=> string(1) "C" } } }
// string(1) "D"
// object(A)#1 (1) { ["observers":protected]=> array(2) { [0]=> object(B)#2 (1) { ["observer_name":protected]=> string(1) "B" } [1]=> object(C)#3 (1) { ["observer_name":protected]=> string(1) "C" } } }
// string(1) "D"
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有