簡介: 原型模式,屬於創建型模式的一種。 主要針對對象進行克隆,把被克隆的對象稱之為原型,原型模式稱之為克隆模式也許更為貼切。 用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象。 適用場景: 實例化對象的資源開銷過大時可直接克隆。 需要迴圈創建大量對象,此時用克隆也是一個挺不錯的選擇。 ...
簡介:
原型模式,屬於創建型模式的一種。
主要針對對象進行克隆,把被克隆的對象稱之為原型,原型模式稱之為克隆模式也許更為貼切。
用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象。
適用場景:
- 實例化對象的資源開銷過大時可直接克隆。
- 需要迴圈創建大量對象,此時用克隆也是一個挺不錯的選擇。
優點:
- 高性能:如果創建對象的過程複雜,或者消耗大量資源,那麼直接克隆就可以高性能的簡化這一流程。
- 實現簡單,某些場景下,相比於實例化對象的各種前置操作,而克隆一個關鍵字就能搞定。
缺點:
克隆出來的對象與原型對象不是一個,可能在某些業務場景上,可能會受影響
代碼:
//抽象出來一個操作系統的類
abstract class OS {
public $os;
//setOS可以理解為安裝操作系統
public function installOS($os) {
$this->os = $os;
}
//runOS可以理解為運行操作系統
public function runOS() {
return $this->os . PHP_EOL;
}
//__clone方法是原型模式中需要有的,儘管可能用不上
abstract function __clone();
}
class Windows extends OS{
public function __clone() {}
}
class Linux extends OS{
public function __clone() {}
}
//調用端============================================
//偉大的工程師們開發好了兩套操作系統
$windows = new Windows();
$linux = new Linux();
//把它們克隆到光碟上,分別給3個用戶安裝。這樣就不用在從零開發操作系統了,直接複製開銷極小,然後把它們運行起來。
for($i = 0; $i < 3; $i ++) {
$new_windows = clone $windows;
$new_windows->installOS('windows');
echo $new_windows->runOS();
}
//把它們克隆到光碟上,分別給2個用戶安裝。這樣就不用在從零開發操作系統了,直接複製開銷極小,然後把它們運行起來。
for($j = 0; $j < 2; $j ++) {
$new_linux = clone $linux;
$new_linux->installOS('linux');
echo $new_linux->runOS();
}