单例模式确保一个类只有一个实例,并实例化自身并将该实例提供给整个系统。
单例模式是一种常见的设计模式。 在计算机系统中,线程池、缓存、日志对象、对话框、打印机、数据库操作和显卡驱动程序通常被设计为单例。
单例模式分为三种类型:懒人式单例、饥饿人式单例、注册式单例。
单例模式具有以下三个特点:
1. 只能有一个实例。
2. 该实例必须由您自己创建。
3. 该实例必须提供给其他对象。
class Single {
private $name;//声明一个私有的实例变量
private function __construct(){//声明私有构造方法为了防止外部代码使用new来创建对象。
}
static public $instance;//声明一个静态变量(保存在类中唯一的一个实例)
static public function getinstance(){//声明一个getinstance()静态方法,用于检测是否有实例对象
if(!self::$instance) self::$instance = new self();
return self::$instance;
}
public function setname($n){ $this->name = $n; }
public function getname(){ return $this->name; }
}
$oa = Single::getinstance();
$ob = Single::getinstance();
$oa->setname('hello world');
$ob->setname('good morning');
echo $oa->getname();//good morning
echo $ob->getname();//good morning
工厂模式
工厂模式是我们最常用的实例化对象模式,是一种用鞋工厂方法代替new操作的模式。
使用鞋工厂模式的用处在于,如果要修改实例化的类名等,只需要修改鞋工厂方法的内容即可,不需要再去查找具体实例化的地方代码一一(新增)修改。 为系统结构提供灵活的动态扩展机制,减少耦合。
<?php
header('Content-Type:text/html;charset=utf-8');
/**
*简单工厂模式(静态工厂方法模式)
*/
/**
* Interface people 人类
*/
interface people
{
public function say();
}
/**
* Class man 继承people的男人类
*/
class man implements people
{
// 具体实现people的say方法
public function say()
{
echo '我是男人
';
}
}
/**
* Class women 继承people的女人类
*/
class women implements people
{
// 具体实现people的say方法
public function say()
{
echo '我是女人
';
}
}
/**
* Class SimpleFactoty 工厂类
*/
class SimpleFactoty
{
// 简单工厂里的静态方法-用于创建男人对象
static function createMan()
{
return new man();
}
// 简单工厂里的静态方法-用于创建女人对象
static function createWomen()
{
return new women();
}
}
/**
* 具体调用
*/
$man = SimpleFactoty::createMan();
$man->say();
$woman = SimpleFactoty::createWomen();
$woman->say();
注册方式
注册模式,寻址全局共享和交换对象。 创建的对象挂在一个可以全局使用的链表上。 当需要使用时,直接从链表中获取即可。 在全局树上注册该对象。 任何地方都可以直接访问。
<?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]);//移除某个注册到树上的对象。
}
}
策略模式是对象的行为模式单例模式 php单例模式 php,旨在封装一组算法。 动态选择所需的算法并使用它。
策略模式是指程序中涉及决策控制的模式。 策略模式非常强大,因为这种设计模式本身的核心思想就是面向对象编程的多态思想。
策略模式的三个角色:
1.抽象策略角色
2.具体战略角色
3. 环境角色(参考具体政策角色)
实施步骤:
1.定义具体角色类(定义各个实现的公共抽象方法)
2.定义具体的策略类(常见的实现方式是父类)
3.定义环境角色类(私有化并声明具体角色变量,重载构造方法,执行具体方法)
PrintPage ();
}
}
$bro = new Browser ();
echo $bro->call ( new ieAgent () );
?>
观察者模式
1:观察者模式(Observer),当一个对象的状态发生变化时,所有依赖它的对象都会得到通知并手动更新。
2:场景:风暴发生后,需要进行一系列的更新操作。 传统的编程方法是直接在storm代码中添加处理逻辑。 当更新逻辑增多时,代码就会显得不可维护。 这种方法具有耦合性和侵入性,添加新的逻辑需要更改storm的主要代码。
3:观察者模式实现低耦合、非侵入式的通知和更新机制。
abstract class EventGenerator
{
private $ObServers = [];
//增加观察者
public function add(ObServer $ObServer)
{
$this->ObServers[] = $ObServer;
}
//事件通知
public function notify()
{
foreach ($this->ObServers as $ObServer) {
$ObServer->update();
}
}
}
/**
* 观察者接口类
* Interface ObServer
*/
interface ObServer
{
public function update($event_info = null);
}
/**
* 观察者1
*/
class ObServer1 implements ObServer
{
public function update($event_info = null)
{
echo "观察者1 收到执行通知 执行完毕!n";
}
}
/**
* 观察者1
*/
class ObServer2 implements ObServer
{
public function update($event_info = null)
{
echo "观察者2 收到执行通知 执行完毕!n";
}
}
/**
* 事件
* Class Event
*/
class Event extends EventGenerator
{
/**
* 触发事件
*/
public function trigger()
{
//通知观察者
$this->notify();
}
}
//创建一个事件
$event = new Event();
//为事件增加旁观者
$event->add(new ObServer1());
$event->add(new ObServer2());
//执行事件 通知旁观者
$event->trigger();
发表评论