php设计模式下
admin
2023-06-26 05:41:26
0

1 数据对象映射模式

1数据对象映射模式,是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作

2在代码中实现数据对象映射模式,我们实现一个ORM类,将复杂的SQL语句映射成对象属性的操作

3结合使用数据对象映射模式、工厂模式、注册模式


例子:

User.php


namespace IMooc;

class User

{

public $id;

public $name;

public $mobile;

public $regitime;


protected $db;

// 读取 

function __construct($id){

$this->db = new \IMooc\Database\MySQL();

$this->db->connect('127.0.0.1','root','root','test');

$res = $this->db->query('select * from user limit 1');

$data = $res->fetch_assos();

$this->id = $data['id'];

$this->name = $data['name'];

$this->mobile = $data['mobile'];

$this->regitime = $data['regitime'];

}

// 可以在析构够 执行 修改 插入 删除

function __destruct(){

// 更新SQL

$this->db->query('update user set name = "{$this->name}", mobile="{$this->mobile}",regtime="{$this->regtime}",id="{$this->id}"');

}

}



index.php

$user = new User(1);

$user->mobile = '13880425377';

$user->name ='test';

$user->regtime = time();


var_dump($user->id,$user->name);


// 对对象的数据的读写



2 数据映射的复杂案例

index.php


class Page

{

function index()

{


}

$user = new \IMooc\User(1);

$user->mobile = '13880425377';

$user->name ='test';

$user->regtime = time();

}


工厂模式、注册器模式、单立模式



9 观察者模式

1 观察者模式(Observer),当一个对象状态发生改变时,依赖它的对象全部会收到通知,并自动更新

2 常见:一个事件发生后,要执行一连串更新操作,传统的编程方式,就是在时间的代码之后直接加入处理逻辑,当更新的逻辑增多之后,代码会变得难以维护,这种方式是耦合的,侵入式的,增加新的逻辑需要修改主体的代码

3 观察者模式实现了低耦合,非侵入式的通知于更新机制。


index.php

class Event extentd \IMooc\EventGenerator

{

function trigger()

{

echo 'Event
';

echo '逻辑1
';

echo '逻辑2
';

$this->nodtify();

}

}

$event = new Event;

$event->trigger();


// 传统之上;  高度耦合,侵入式;


EventGenerator.php

namespace IMooc;

abstract class EventGenerator

{

protected $observers = array();

function addObserver(Observer$observer){

}


function notefy(){

foreach($this->observers as $observer){

$observer->update();

}

}

}


Observer.php

namespace IMooc;

interface Observer

{

function update($event_info=null);

}


class Observer1 implements \IMooc\Observer

{

function update()

{

}

}


10 原型模式

1 与工厂模式作用类似,都是用来创建对象

2 与工厂模式的实现不同,原型模式是先创建好一个原型对象,然后通过clone原型对象来创建新的对象,这样就免去了类创建时重复的初始化操作

3 原型模式适用于大对象的创建,创建一个大对象需要很大的开销,如果每次new就会消耗很大,原型模式仅需内存拷贝即可。

// 原型模式


class Canvas{

// 模拟画布

function init(){

echo 'init';

}

function draw(){

echo 'draw';

}

}


$canvas1 = new Canvas;

$canvas1->init();// 如果初始化消耗系统资源多

$canvas1->draw();


// 原型对象初始化  这样就少了初始化 

$prototype = new Canvas;

$prototype->init();


$canvas2 = clone $prototype;

$canvas2->draw();


$canvas3 = clone $prototype;

$canvas3->draw();


11 装饰器模式

1 装饰器模式(Decorator),可以动态地添加修改类的功能

2 一个类提供了一项功能,如果要在修改并添加额外的功能,传统的编程模式,需要写一个子类集成它,并重新实现类的方法

3 使用装饰器模式,仅需要在运行时添加一个装饰器对象即可实现,可以实现最大的灵活性。

12 迭代器模式

1 在不需要了解内部实现的前提下,遍历一个聚合对象的内部元素

2 相比于传统的编程模式,迭代器模式可以隐藏遍历元素所需的操作



相关内容

热门资讯

要不要“卸磨杀驴”?印尼陷入两... 【文/观察者网专栏作者 罗仪馥】据报道,印尼中国商会总会近日向普拉博沃总统发出一封英文信函,直指该国...
新加坡贸易关系部长:新加坡正承... 中东局势持续紧张,正在通过能源、航运和供应链等渠道影响全球经济。对于高度依赖贸易、能源进口和国际物流...
原创 国... 当传统山水风光遇上前沿国产科技,国内知名山岳景区正在悄然完成一场体验变革。以黄山接入国产大模型、泰山...
2026深圳厂区人员定位技术升... 深圳厂区人员定位系统是依托无线传感与射频识别技术,对工业厂区、隧道作业等封闭或半封闭场所内的人员位置...
驾驶模拟战机、玩转编程机器人,... 极目新闻记者 狄鑫 通讯员 蔡晨曦 邢彦超 当六一遇上科技,当童心碰撞创新,一场别开生面的科技游园盛...
双英集团杨英:拟募资加码新能源... 作为深耕汽车座椅和内外饰领域二十余年的高新技术企业,广西双英集团股份有限公司(以下简称“双英集团”)...
这场大赛,解锁产才融合新范式 当机器人算力奔腾,当科创浪潮席卷齐鲁,一场属于智能产业的青春对决,正在泉城济南火热上演。 5月26日...
关志鸥任湖北省委书记 新华社北京5月30日电 日前,中共中央决定:关志鸥同志任湖北省委委员、常委、书记;王忠林同志不再担任...
台专家:民进党整合派系应战,征... 针对绿营2026“九合一选举”布局,台湾艺术大学广电系教授赖祥蔚表示,从北高市长参选人、县市党部主委...
电视机一直闪屏怎么办 1、如果是信号不稳定的情况,是没有什么好的处理办法的只能等一段时间等信号稳定下来就可以了。2、关闭电...