日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

php设计模式

發(fā)布時(shí)間:2023/11/27 生活经验 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php设计模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原型模式(prototype

?

?

PHP設(shè)計(jì)模式之:原型模式

剛剛了解了原型模式,通過資料以及自身了解整合以下資料:

????原型模式通過復(fù)制已經(jīng)存在的實(shí)例來返回新的實(shí)例,而不是新建實(shí)例,并且原型(被復(fù)制的實(shí)例)是可定制的;原型模式多用于創(chuàng)建復(fù)雜的或耗時(shí)的實(shí)例,這種情況下,復(fù)制一個(gè)已經(jīng)存在的實(shí)例是程序運(yùn)行更高效無疑是一種好辦法;

概念:

????用原型實(shí)例創(chuàng)建對(duì)象的種類,并通過拷貝這些原型創(chuàng)建的對(duì)象;

結(jié)構(gòu)圖:

?

主要角色:

抽象原型角色(Prototype):聲明一個(gè)克隆自身的接口

具體原型角色(ConcretePrototype):實(shí)現(xiàn)一個(gè)克隆自身的操作

Prototype模式優(yōu)點(diǎn):

1、可以在運(yùn)行時(shí)刻增加和刪除產(chǎn)品

2、可以改變值或結(jié)構(gòu)以指定新對(duì)象

3、減少子類的構(gòu)造

4、用類動(dòng)態(tài)配置應(yīng)用

Prototype模式的缺點(diǎn):

Prototype是的最主要的缺點(diǎn)就是每一個(gè)類必須包含一個(gè)克隆方法;

而且這個(gè)克隆方法需要對(duì)類的功能進(jìn)行檢測(cè),這對(duì)于全新的類來說較容易,但對(duì)已有的類進(jìn)行改造時(shí)將不是件容易的事情;

代碼實(shí)現(xiàn):

/1**/這些注釋的居然全沒了,糾結(jié)!!(就加個(gè)1)

<?php

/1**

?*?

?*?原型模式

?*?用原型實(shí)例指定創(chuàng)建對(duì)象的種類.并且通過拷貝這個(gè)原型來創(chuàng)建新的對(duì)象

?*?@author?lzs

?*?

?*/

?

?/1**

??*?

??*?聲明一個(gè)克隆自身的接口,即抽象原型角色

??*?@author?lzs

??*

??*/

?interface?Prototype

?{

??public?function?copy();

?}

?

/1**

?*?

?*?實(shí)現(xiàn)克隆自身的操作,具體原型角色

?*?@author?lzs

?*

?*/

?class?ConcretePrototype?implements?Prototype

?{

??private?$name;

?

??function?__construct($name)

??{

??$this->name?=?$name;

??}

?

??function?getName()

??{

??return?$this->name;

??}

?

??function?setName($name)

??{

??$this->name?=?$name;

??}

?

??//克隆

??function?copy()

??{

??/1**

???*?淺拷貝

???*/

??//return?clone?$this;

?

??/1**

???*?深拷貝

???*/

??$serialize_obj?=?serialize($this);??//序列化

??$clone_obj?=?unserialize($serialize_obj);???//反序列化

??return?$clone_obj;

??}

?}

?

/1**

?*?測(cè)試深拷貝的類

?*/?

?class?Test

?{

??public?$array;

?}

?

/1**

?*?

?*?客戶端

?*?@author?lzs

?*

?*/

?class?Client

?{

??/1**

???*?實(shí)現(xiàn)原型模式

???*?

???*?@return?string?取出數(shù)據(jù)

???*/

??public?static?function?main()

??{

??/1**

???*?淺拷貝

???*/

//??$pro??=?new?ConcretePrototype('prototype');

//??$pro2?=?$pro->copy();

//??echo?'1:'.$pro->getName().'<br?/>2:'.$pro2->getName();

?

??/1**

???*?深拷貝

???*/

??$test?=?new?Test();

??$test->array?=?array('1','2','3');

??$pro1?=?new?ConcretePrototype($test);

??$pro2?=?$pro1->copy();

?

??print_r($pro1->getName());

??echo?'<br?/>';

??print_r($pro2->getName());

??}

?}

?

?Client::main();

?

淺拷貝:

????被拷貝對(duì)象的所有變量都含有與原對(duì)象相同的值,而且對(duì)其他對(duì)象的引用仍然是指向原來的對(duì)象。即淺拷貝只負(fù)責(zé)當(dāng)前對(duì)象實(shí)例,對(duì)引用的對(duì)象不做拷貝。

深拷貝:

????被拷貝對(duì)象的所有的變量都含有與原來對(duì)象相同的值,除了那些引用其他對(duì)象的變量。那些引用其他對(duì)象的變量將指向一個(gè)被拷貝的新對(duì)象,而不再是原有那些被引用對(duì)象。

????即深拷貝把要拷貝的對(duì)象所引用的對(duì)象也都拷貝了一次,而這種對(duì)被引用到的對(duì)象拷貝叫做間接拷貝。深拷貝要深入到多少層,是一個(gè)不確定的問題。

????在決定以深拷貝的方式拷貝一個(gè)對(duì)象的時(shí)候,必須決定對(duì)間接拷貝的對(duì)象是采取淺拷貝還是深拷貝還是繼續(xù)采用深拷貝。

????因此,在采取深拷貝時(shí),需要決定多深才算深。此外,在深拷貝的過程中,很可能會(huì)出現(xiàn)循環(huán)引用的問題。

利用序列化來做深拷貝:

????利用序列化來做深拷貝,把對(duì)象寫到流里的過程是序列化(Serilization)過程,但在業(yè)界又將串行化這一過程形象的稱為“冷凍”或“腌咸菜”過程;

?

?

?

?

?

?

?

?

?

?

?

?

單例模式(singleton

工廠模式(factory

抽象工廠模式(abstruct factory

工廠方法模式(factory_method

??策略模式(strategy

觀察者模式(observe

?代理模式(proxy pattern

?裝飾器模式(decorator

建造者模式(build

?適配器模式(adapter

享元模式(flyweight

解釋器模式(interpreter

?

迭代器模式(iteration

?

備忘錄模式(memento

責(zé)任鏈模式(responsibility_chain

狀態(tài)模式(state

中介者模式(mediator

外觀模式(結(jié)構(gòu)型facade

命令模式(command

橋接模式(bridge

訪問者模式(visitor

?

轉(zhuǎn)載于:https://www.cnblogs.com/xulei13140106/p/5946437.html

總結(jié)

以上是生活随笔為你收集整理的php设计模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。