0

PHPを使って工場のパターン設計を学んでいます。私のアプリケーションが行うことは、さまざまな形状の名前Rectangle, Squares etcとそのx, y位置を表示することです。最初のユーザーは、このような形状名の横に表示される x 値と y 値を指定しますRectangle(2, 2)

現在のコードの問題は、シェイプ名が表示されること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.
    }
}
4

1 に答える 1

0

やり方を理解するための factory の使用例

class Shape{
    int x,y
}

class Rectangle implements Shape{

}

class Circle implements Shape{

}
class ShapeCreator{
    public function create(string shapeName, int x, int y) {
        switch(shapeName)
            rectangle:
                return new Rectangle(x,y)
            circle:
                return new Circle(x,y)
    }    
}
main{
    sc = new ShapeCreator
    Shape circle = sc.create(1,2, "circle")
}

他の概念を確認するには、ウィキペディアを参照してください。Factoryクラスは、異なるタイプの具体的なファクトリによって実装される単なるインターフェイスになることがありますが、コードが単純な場合は、ケースを使用してオブジェクトの作成を実装できます。

于 2013-05-30T08:12:41.560 に答える