工廠是創建型模式,它的作用就是創建物件;
策略是行為型模式,它的功能是讓一個物件在許多行為中選擇一種行為;
關注點不一樣
一個專注於物件創建
一個關注行為的封裝(推薦學習: PHP影片教學)
解決不同的問題
工廠模式是建立型的設計模式,它接受指令,創造出符合要求的實例;它主要解決的是資源的統一分發,將物件的創建完全獨立出來,讓物件的創建和具體的使用客戶無關。主要應用在多資料庫選擇,類別庫檔案載入等。
策略模式是為了解決的是策略的切換與擴展,更簡潔的說是定義策略族,分別封裝起來,讓他們之間可以相互替換,策略模式讓策略的變化獨立於使用策略的客戶。
工廠相當於黑盒子,策略相當於白盒子;
#實例:
<?php header('content-type:text/html;charset=utf-8'); abstract class Product { abstract public function getName(); } class ProductA extends Product { public function getName() { echo '这是A商品<br>'; } } class ProductB extends Product { public function getName() { echo '这是B商品<br>'; } } //工厂模式 class ProductFactory { public static function create($num) { switch($num) { case 1: return new ProductA(); case 2: return new ProductB(); } return null; } } //传递不同的参数获取不同的对象 $obj=ProductFactory::create(1); $obj->getName(); //这是A商品 $obj=ProductFactory::create(2); $obj->getName(); //这是B商品 //=======策略模式 <?php header('content-type:text/html;charset=utf-8'); interface IStrategy { function ontheway(); } class Walk implements IStrategy { public function ontheway() { echo '走着去<br>'; } } class Bick implements IStrategy { public function ontheway() { echo '骑自行车去<br>'; } } class Bus implements IStrategy { public function ontheway() { echo '坐巴士去<br>'; } } //策略模式,传递不同的参数,调用不同的策略 class Strategy{ public function getWay(IStrategy $obj) { $obj->ontheway(); } } $obj=new Strategy(); $obj->getWay(new Walk); //走着去 $obj->getWay(new Bick); //骑自行车去 $obj->getWay(new Bus); //坐巴士去
更多PHP相關技術文章,請造訪PHP圖文教學欄位進行學習!
以上是php 工廠模式和策略模式區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!