php实现设计模式之 原型模式

WBOY
リリース: 2016-06-06 19:47:27
オリジナル
1138 人が閲覧しました

?php/* * 原型模式:通过复制已经存在的对象来创建新对象。 * 通过原型实例指定创建对象的种类,并且通过copy这些原型创建信的对象 * 是创建型模式 * 有的时候创建一个对象有很多步骤才算是完成一个完整的创建过程,我要再创建一个的话,还得从头开始,不如

<?php /*
 * 原型模式:通过复制已经存在的对象来创建新对象。
 * 通过原型实例指定创建对象的种类,并且通过copy这些原型创建信的对象
 * 是创建型模式
 * 有的时候创建一个对象有很多步骤才算是完成一个完整的创建过程,我要再创建一个的话,还得从头开始,不如复制,使用原型模式实现。
 * 原型模式还可以某个对象在运行中的状态
 */

interface Potrotype{
	public function copy();
}

//通过在原型类中加一个copy方法,使得这个原型类的实例可以被复制
class Demo implements Potrotype{
	private $state;
	
	public function setState($state){
		$this->state = $state;
	}
	
	public function getState(){
		return $this->state;
	}
	
	public function copy(){
		return clone $this;//浅拷贝

		/*
		 * 深拷贝
		 */
//		$tmp = serialize($this);
//		$tmp = unserialize($tmp);
//		return $tmp;
	}
}

class Client{
	public static function main(){
		$obj1 = new Demo();
		$obj1->setState(23);
		$obj2 = $obj1->copy();
		$res = $obj2->getState();
		echo $res;
	}
}
Client::main();
?>
ログイン後にコピー

  

php实现设计模式之 原型模式

 

说一下浅拷贝和深拷贝

大学学习c语言时,提到过这两个的区别。我依稀记得是 值拷贝是深拷贝,而指针拷贝是浅拷贝。

浅复制呢又称为浅拷贝,深复制又称为深拷贝。

浅复制的话,就是通过一个原型实例(这里暂称为老对象)克隆所得到的对象(这里暂时称为新对象),

而这个新对象中所有的值类型变量都含有与老对象相同的值,

但是,新对象所有的对其他对象的引用却是和老对象指向同一个地方,

即对引用类型来说,老对象和新对象指向同一个引用对象。

深复制呢,和浅复制就一点不同,那就是,

新对象所有的对其他对象的引用都是指向了复制过的对象,而不再是和老对象指向同一个对象。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!