• Domov
  • Reference
  • Blog
  • Kontakt

Tovarniški vzorec – Factory pattern

Objavljeno 5.4.2014 # Peter Draucbaher v Profesionalne teme - Ni komentarjev

Tovarniški vzorec oziroma Factory pattern se uporablja, kadar hočemo dinamično ustvariti objekte in ne vemo točno kakšen bo
objekt, ki ga bomo ustvarili.

Za izgradnjo objekta zadolžimo peseben razred(Tovarno) in ta nam vrne ustrezen razred, ki ga potrebujemo.
Obvezno morajo biti produkti tovarne istega tipa in imeti isti koren.

Primer v kodi je Ladja… Obstajajo različen vrste ladij, a vse imajo isti koren in implementirajo vmesnik Ladja.

Zelo lepo se vidi, da imamo vmesnik “Ladja”, ki ga implementirajo vsi tipi ladij. Vmesnik je kot matrica ulitka ostalim matricam(kalup kalupom) in vsak od njih mora implementirati metode vmesnika. V formi se uporabnik odloči kakšen tip ladje bo vnesel.
Vnaprej ne moremo vedeti kaj bo vnesel uporabnik saj lahko vnese med štirimi tipi.

Tukaj zadeva postane “umazana”, saj bi morali gledati za vsak vnos posebej in ustrezno kreirati objekt iz razreda.
Glavno sporočilo tovarniškega vzorca je, da naj specialisti poskrbijo za kreiranje ustreznega objekta in naj si
klientova koda ne maže rok z “grdim” delom.

Razred “TovarnaLadij” tako pokrbi za kreiranje objekta in ga vrne klientovi kodi.
Klientova koda se ne rabi spuščati v podrobnosti o tipu ampak je zadosti, da pozna metode vmeniska(Interface) ter tako opravlja s kakršnokoli ladjo, ki jo uporabnik vnese.

Interface Ladja {

	 public function pluj();

	 public function prikaziUgrez();
}

class Kontejneras implements  Ladja{

	public function  pluj() {
		echo "Plujem z hitrostjo okoli 30 vozlov, na mazut
";
	}
	public function prikaziUgrez(){

		echo "Ugrez je okoli 20 metrov
";
	}

}

class Jadrnica implements  Ladja {

	public function  pluj() {
		echo "Plujem z hitrostjo okoli 11 vozlov, na vetrni pogon
";
	}

	public function prikaziUgrez(){

		echo "Ugrez je okoli 2 metra
";
	}
}

class Tanker implements  Ladja {

	public function  pluj() {
		echo "Plujem z hitrostjo okoli 20 vozlov in kurim mazut
";
	}

	public function prikaziUgrez(){

		echo "Ugrez je okoli 25 metrov
";
	}

}

class Pedolino implements  Ladja {

	public function  pluj() {
		echo "Plujem z hitrostjo okoli 2 vozla oz kolker je debel oni, ki me goni;)
";
	}

	public function prikaziUgrez(){

		echo "Ugrez je okoli 0.5 metra odvisen od teže in potnikov
";
	}

}

class TovarnaLadij {

	private $tipLadnje;
	public function  __construct($tip) {
		$this->tipLadnje = $tip;
	}

	public function vrniLadjo() {

		switch($this->tipLadnje) {
			case "kontejneras":
				return new Kontejneras();
			break;

			case "jadrnica":
				return new Jadrnica();
				break;

			case "tanker":
				return new Tanker();
				break;

			case "pedolino":
				return new Pedolino();
				break;
			default:
				die("Vnesete lahko samo: kontejneras,jadrnica, tanker, pedolino");
				break;
		}
	}

}
if(isset($_POST['ladja']) && !empty($_POST['ladja'])) {

	$tovarna = new TovarnaLadij($_POST['ladja']);
	$ladja = $tovarna->vrniLadjo();

	$ladja->pluj();
	$ladja->prikaziUgrez();

}else {
	?></pre>
<form id="mainForm" action="" enctype="multipart/form-data" method="post" name="form1">
<span>Vnesi ladjo. Vnesete lahko samo:</span>
<ul>
	<li>kontejneras</li>
	<li>jadrnica</li>
	<li>tanker</li>
	<li>pedolino</li>
</ul>
 <label>

 </label>
 <input type="text" name="ladja" />

 <input type="submit" value="vnesi ladjo" /></form>
<pre>	<!--?php } ?-->

Komentiraj Cancel reply

Vaš e-naslov ne bo objavljen. * označuje zahtevana polja

Lahko uporabite te oznake HTML in atribute: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Kategorije

  • Profesionalne teme

Najnovejši prispevki

  • Tovarniški vzorec – Factory pattern
  • Singleton vzorec
  • Passbook in PassWallet
  • Pisanje objektnega javascripta

Arhiv

  • april 2014 (2)
  • julij 2013 (1)
  • november 2012 (1)
(c) 2020 Dravasoft