我正在學習使用php的工廠模式設計。我的應用程序所做的是顯示不同的形狀名稱,例如Rectangle, Squares etc
及其x, y
職位。第一個用戶將提供x和y值,它將與形狀名稱一起顯示,例如像這樣的Rectangle(2, 2)
。php工廠模式設計問題
我目前的代碼存在的問題是,它確實顯示了形狀名稱,即Rectangle
,但它沒有顯示用戶提供的x和y值。爲什麼以及如何顯示x和y值?
下面是我的代碼 的index.php
include_once("ConcreteCreator.php");
class Client {
public function __construct() {
$shapeNow = new ConcreteCreator();
$display = $shapeNow->factoryMethod(new Rectangle(2, 2));
//Above I am passing x and y values in Rectangle(2, 2);
echo $display . '<br>';
}
}
$worker = new Client();
下面是ConcreteCreator.php
include_once('Creator.php');
include_once('Rectangle.php');
class ConcreteCreator extends Creator {
public function factoryMethod(Product $productNow) {
//echo $productNow;
$this->createdProduct = new $productNow;
return $this->createdProduct->provideShape();
}
}
下面是Creator.php
abstract class Creator {
protected $createdProduct;
abstract public function factoryMethod(Product $productNow);
}
下面是Product.php
interface Product {
function provideShape();
}
這裏是Rectangle.php
include_once('Product.php');
class Rectangle implements Product {
private $x;
private $y;
//Here is I am setting users provided x and y values with private vars
public function __construct($x, $y) {
echo $x;
$this->x = $x;
$this->y = $y;
}
public function provideShape() {
echo $this->x; //Here x does not show up
return 'Rectangle (' . $this->x . ', ' . $this->y . ')';
//above x and y does not show up.
}
}
你爲什麼重新創建ConcreteCreator.php中的對象? '$ this-> createdProduct = new $ productNow;'只需使用'$ this-> createdProduct = $ productNow;'並且這可以解決您的問題 – Shaheer
抱歉刪除評論。從頭開始。工廠用於創建具有相同父級的對象的更多指定實例,因此可以說您擁有圖形父對象,它包含一些基本功能,如獲取x和y,其x和y方法以及抽象繪製方法,比你將對象傳遞給創建者的字符串可以說「圓」,它將填充所有的absctract函數與圓類繪圖等。至少這是我如何得到工廠模式。 – cerkiewny
這不像工廠模式。在這個例子中,你自己創建了'Rectangle' *,通常你會傳入類似於「矩形」的描述,工廠會自動創建。 – Jon