PHP デザインパターン(Prototypeパターン)

Prototypeパターン

↓買ったので、JavaPHPに読み替えて勉強。そのメモ。

サンプルプログラム
<?php

interface Product{
	function output($string);
	function createClone();
}


/*
*
* Productインタフェースを使ってインスタンスを複製するクラス
*
*/
class Manager{
	private $showcase = array();

	function register($name, $proto){
		$this->showcase[$name] = $proto;
	}

	function create($protoname){
		$p = $this->showcase[$protoname];
		return $p->createClone();
	}
}


class MessageBox implements Product{
	private $decochar;

	function __construct($decochar){
		$this->decochar = $decochar;
	}

	function output($string){
		$length = mb_strlen($string);

		for($i=0; $i<$length+4; $i++){
			echo $this->decochar;
		}

		echo "\n";
		echo $this->decochar." ".$string." ".$this->decochar;
		echo "\n";

		for($i=0; $i<$length+4; $i++){
			echo $this->decochar;
		}

		echo "\n";
	}
	
	function createClone(){
		$Product = clone $this;
		return $Product;
	}
}

//準備
$manager = new Manager();
$mbox    = new MessageBox('*');
$manager->register("warning box", $mbox);

//生成
$Product = $manager->create("warning box");
$Product->output("Hello, world.");


?>