PHP設計模式之工廠方法模式

2021-09-25 03:07:32 字數 1783 閱讀 7898

以下文字部分均為本人自己的想法與總結所以未必正確;

**部分摘錄自

工廠方法模式:

優點:彌補了簡單工廠的確點,即當要修改類的時候工廠類也需要做出相對應的更改。之所以可以解決簡單工廠的問題,是因為工廠方法模式把具體產品的建立推遲到工廠類的子類(具體工廠)中,此時工廠類不再負責所有產品的建立,而只是給出具體工廠必須實現的介面,這樣工廠方法模式在新增新產品的時候就不修改工廠類邏輯而是新增新的工廠子類,符合開放封閉原則,克服了簡單工廠模式中缺點

操作步驟:

1、建立抽象工廠類,定義具體工廠的公共介面

2、建立抽象產品類,定義具體產品的公共介面

3、建立具體產品類(繼承抽象產品類) & 定義生產的具體產品

4、建立具體工廠類(繼承抽象工廠類),定義建立對應具體產品例項的方法

5、外界通過呼叫具體工廠類的方法,從而建立不同具體產品類的例項

個人比喻:

假如有呼叫者要買豬肉,現在四個工人,分別能加工雞肉、鴨肉、豬肉、牛肉,使用簡單工廠只需要呼叫者對工廠說「我要豬肉」就行了。但是問題來了,現在呼叫者說我要買羊肉,此時工廠裡沒有羊肉工人,這時候就要修改工廠的**了。

工廠方法模式解決了簡單工廠模式的這個問題。現在成立了集團,集團下很多任務廠,並規定了工廠都有「生產工人」這個方法(也就是建立生產者物件),有很多符合該條件的工廠,現在呼叫者買雞肉找雞肉廠,買鴨肉找鴨肉廠,買豬肉找豬肉廠等等。那麼呼叫者想吃牛肉的時候,再造乙個牛肉廠就行了。工廠方法模式就不用修改工廠原來的**了。

<?php

/** * created by phpstorm.

* user: mengzhehao

* date: 2019/7/9

* time: 17:01

* note: 工廠方法模式

*/class operation

public function setb($b)

public function getresult()

}class operationadd extends operation

}class operationmul extends operation

}/**

* sub

*/class operationsub extends operation

}/**

* div

*/class operationdiv extends operation

}/**

* inte***ce ifactory

* 工廠的介面

*/inte***ce ifactory

class addfactory implements ifactory

}class subfactory implements ifactory

}class mulfactory implements ifactory

}class divfactory implements ifactory

}//客戶端**

$operationfactory = new subfactory();

$operation = $operationfactory->createoperation();

$operation->seta(20);

$operation->setb(10);

echo $operation->getresult()."\n";

設計模式 工廠模式之工廠方法模式

工廠方法模式是指定義乙個建立物件的介面,然後實現這個介面的工廠來決定建立什麼樣的例項。工廠方法讓類的例項推遲到子類中進行。在這個模式中,只關心需要建立的是什麼工廠,不需要關心建立的細節。而且新加入的產品符合開閉原則。1 建立支付介面,裡面定義抽象的支付方法。package com.gupao.vip...

PHP設計模式 工廠方法

宣告 本系列部落格參考資料 大話設計模式 作者程杰。前面我們介紹了簡單工廠,今天我們繼續學習另外乙個工廠 工廠方法。具體案例 請mm去麥當勞吃漢堡,不同的mm有不同的口味,要每個都記住是一件煩人的事情,我們一般採用factorymethod模式,帶著mm到服務員那兒,說 要乙個漢堡 具體要什麼樣的漢...

設計模式之工廠方法模式

package com.csair.design.pattern 工廠方法,有抽象基類,每個子類生產乙個具體物件,與抽象工廠的關係是,抽象工廠生產多個產品 產品有某種內在聯絡 工廠方法只生產乙個物件 author ppt public class factorymethod public stati...