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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

php设计模式

發布時間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php设计模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原型模式(prototype

?

?

PHP設計模式之:原型模式

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

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

概念:

????用原型實例創建對象的種類,并通過拷貝這些原型創建的對象;

結構圖:

?

主要角色:

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

具體原型角色(ConcretePrototype):實現一個克隆自身的操作

Prototype模式優點:

1、可以在運行時刻增加和刪除產品

2、可以改變值或結構以指定新對象

3、減少子類的構造

4、用類動態配置應用

Prototype模式的缺點:

Prototype是的最主要的缺點就是每一個類必須包含一個克隆方法;

而且這個克隆方法需要對類的功能進行檢測,這對于全新的類來說較容易,但對已有的類進行改造時將不是件容易的事情;

代碼實現:

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

<?php

/1**

?*?

?*?原型模式

?*?用原型實例指定創建對象的種類.并且通過拷貝這個原型來創建新的對象

?*?@author?lzs

?*?

?*/

?

?/1**

??*?

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

??*?@author?lzs

??*

??*/

?interface?Prototype

?{

??public?function?copy();

?}

?

/1**

?*?

?*?實現克隆自身的操作,具體原型角色

?*?@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**

?*?測試深拷貝的類

?*/?

?class?Test

?{

??public?$array;

?}

?

/1**

?*?

?*?客戶端

?*?@author?lzs

?*

?*/

?class?Client

?{

??/1**

???*?實現原型模式

???*?

???*?@return?string?取出數據

???*/

??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();

?

淺拷貝:

????被拷貝對象的所有變量都含有與原對象相同的值,而且對其他對象的引用仍然是指向原來的對象。即淺拷貝只負責當前對象實例,對引用的對象不做拷貝。

深拷貝:

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

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

????在決定以深拷貝的方式拷貝一個對象的時候,必須決定對間接拷貝的對象是采取淺拷貝還是深拷貝還是繼續采用深拷貝。

????因此,在采取深拷貝時,需要決定多深才算深。此外,在深拷貝的過程中,很可能會出現循環引用的問題。

利用序列化來做深拷貝:

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

?

?

?

?

?

?

?

?

?

?

?

?

單例模式(singleton

工廠模式(factory

抽象工廠模式(abstruct factory

工廠方法模式(factory_method

??策略模式(strategy

觀察者模式(observe

?代理模式(proxy pattern

?裝飾器模式(decorator

建造者模式(build

?適配器模式(adapter

享元模式(flyweight

解釋器模式(interpreter

?

迭代器模式(iteration

?

備忘錄模式(memento

責任鏈模式(responsibility_chain

狀態模式(state

中介者模式(mediator

外觀模式(結構型facade

命令模式(command

橋接模式(bridge

訪問者模式(visitor

?

轉載于:https://www.cnblogs.com/xulei13140106/p/5946437.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。