abstract:本章通過(guò)對(duì)工廠模式和依賴注入模式的學(xué)習(xí),了解了工廠模式主要是通過(guò)在工廠類中統(tǒng)一創(chuàng)建并返回其他類的對(duì)象;依賴注入主要通過(guò)構(gòu)造函數(shù)或者普通方法傳對(duì)象參數(shù)的方式,把具體對(duì)象注入到方法中。通過(guò)兩種設(shè)計(jì)模式,解決了原先在類中直接創(chuàng)建其他類所導(dǎo)致的高耦合問(wèn)題,實(shí)現(xiàn)解耦。實(shí)現(xiàn)代碼如下:工廠模式代碼:Factory.php<?php namespace app\index\controller;
本章通過(guò)對(duì)工廠模式和依賴注入模式的學(xué)習(xí),了解了工廠模式主要是通過(guò)在工廠類中統(tǒng)一創(chuàng)建并返回其他類的對(duì)象;依賴注入主要通過(guò)構(gòu)造函數(shù)或者普通方法傳對(duì)象參數(shù)的方式,把具體對(duì)象注入到方法中。通過(guò)兩種設(shè)計(jì)模式,解決了原先在類中直接創(chuàng)建其他類所導(dǎo)致的高耦合問(wèn)題,實(shí)現(xiàn)解耦。實(shí)現(xiàn)代碼如下:
工廠模式代碼:
Factory.php
<?php namespace app\index\controller; class Factory { public static function create($class) { switch (strtolower($class)) { case 'boy': return new Boy(); break; case 'girl': return new Girl(); break; } } } class Boy { public function show() { return '我是男孩'; } } class Girl { public function show() { return '我是女孩'; } }
Index.php調(diào)用:
<?php namespace app\index\controller; use think\Request; class Index { public function index() { // dump(DataBase::getInstance()); //單例模式獲取數(shù)據(jù)庫(kù)配置信息 return Factory::create('girl')->show(); //工廠模式創(chuàng)建類及調(diào)用類方法 //通過(guò)依賴注入實(shí)現(xiàn)解耦 // $girl=new Person(); // $injection=new Injection($girl); // return $injection->getAbility($girl); } public function hello($name = 'ThinkPHP5') { return 'hello,' . $name; } /** * 獲取請(qǐng)求參數(shù) * @param Request 請(qǐng)求的參數(shù) */ public function getParam(Request $request) { dump($request->param()); } }
效果圖:
依賴注入實(shí)現(xiàn)解耦代碼:
Person.php
<?php /** * Created by PhpStorm. * User: Jizp * Date: 2019-2-21 * Time: 10:42 */ namespace app\index\controller; class Person { public function sing() { return '唱歌'; } public function dance() { return '跳舞'; } }
Injection.php
<?php namespace app\index\controller; class Injection { private $done; //構(gòu)造函數(shù)依賴注入 public function __construct(Person $gril) { $this->done=$gril->sing(); } public function getDone() { return '我可以'.$this->done; } //普通方法依賴注入 public function getAbility(Person $girl) { return $this->getDone().',也可以'.$girl->dance(); } }
Index.php調(diào)用頁(yè)面:
<?php namespace app\index\controller; use think\Request; class Index { public function index() { // dump(DataBase::getInstance()); //單例模式獲取數(shù)據(jù)庫(kù)配置信息 // return Factory::create('girl')->show(); //工廠模式創(chuàng)建類及調(diào)用類方法 //通過(guò)依賴注入實(shí)現(xiàn)解耦 $girl=new Person(); $injection=new Injection($girl); return $injection->getAbility($girl); } public function hello($name = 'ThinkPHP5') { return 'hello,' . $name; } /** * 獲取請(qǐng)求參數(shù) * @param Request 請(qǐng)求的參數(shù) */ public function getParam(Request $request) { dump($request->param()); } }
效果圖:
Correcting teacher:韋小寶Correction time:2019-02-21 11:42:20
Teacher's summary:寫(xiě)的很不錯(cuò) 案例模擬的也很棒 ! !學(xué)習(xí)就是這樣要多多去練習(xí)