ホームページ php教程 php手册 [转载]PHP设计模式之:原型模式

[转载]PHP设计模式之:原型模式

Jun 06, 2016 pm 08:01 PM
php プロトタイプ モデル デザインパターン

刚刚了解了原型模式,通过资料以及自身了解整合以下资料: 原型模式通过复制已经存在的实例来返回新的实例,而不是新建实例,并且原型(被复制的实例)是可定制的;原型模式多用于创建复杂的或耗时的实例,这种情况下,复制一个已经存在的实例是程序运行更高

刚刚了解了原型模式,通过资料以及自身了解整合以下资料:

    原型模式通过复制已经存在的实例来返回新的实例,而不是新建实例,并且原型(被复制的实例)是可定制的;原型模式多用于创建复杂的或耗时的实例,这种情况下,复制一个已经存在的实例是程序运行更高效无疑是一种好办法;

概念:

    用原型实例创建对象的种类,并通过拷贝这些原型创建的对象;

结构图

[转载]PHP设计模式之:原型模式

主要角色:

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

具体原型角色(ConcretePrototype):实现一个克隆自身的操作

Prototype模式优点:

1、可以在运行时刻增加和删除产品

2、可以改变值或结构以指定新对象

3、减少子类的构造

4、用类动态配置应用

Prototype模式的缺点:

Prototype是的最主要的缺点就是每一个类必须包含一个克隆方法;

而且这个克隆方法需要对类的功能进行检测,这对于全新的类来说较容易,但对已有的类进行改造时将不是件容易的事情;

代码实现:

/1**/这些注释的居然全没了,纠结!!(就加个1吧)

/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().'
/>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 '
/>'
;

  print_r($pro2->getName());

  }

 }

 

 Client::main();


浅拷贝:

    被拷贝对象的所有变量都含有与原对象相同的值,而且对其他对象的引用仍然是指向原来的对象。即浅拷贝只负责当前对象实例,对引用的对象不做拷贝。

深拷贝:

    被拷贝对象的所有的变量都含有与原来对象相同的值,除了那些引用其他对象的变量。那些引用其他对象的变量将指向一个被拷贝的新对象,而不再是原有那些被引用对象。

    即深拷贝把要拷贝的对象所引用的对象也都拷贝了一次,而这种对被引用到的对象拷贝叫做间接拷贝。深拷贝要深入到多少层,是一个不确定的问题。

    在决定以深拷贝的方式拷贝一个对象的时候,必须决定对间接拷贝的对象是采取浅拷贝还是深拷贝还是继续采用深拷贝。

    因此,在采取深拷贝时,需要决定多深才算深。此外,在深拷贝的过程中,很可能会出现循环引用的问题。

利用序列化来做深拷贝:

    利用序列化来做深拷贝,把对象写到流里的过程是序列化(Serilization)过程,但在业界又将串行化这一过程形象的称为“冷冻”或“腌咸菜”过程;

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

See all articles