1. 程式人生 > >外觀模式/建造者模式

外觀模式/建造者模式

const nbsp con 必須 per onf ray wav for

外觀模式(門面模式)

通過在必需的邏輯和方法的集合前創建簡單的外觀接口,來隱藏調用對象的復雜性.

class A
{
   public function song($songList)
   {
	foreach($songList as $val) {
		echo $val . ‘.mp3‘;
	}
   }
}

class B
{
   public function song($songList)
   {
	foreach($songList as $val) {
		echo $val . ‘.wav‘;
	}
   }
}

class Facade
{
    private $a;
    private $b;

    public function create()
    {
	$this->a = new A();
	$this->B = new B();
    }

    public function method($songList)
    {
	$this->a->song($songList);
	$this->b->song($songList);
    }
}

特點:
"在必需的邏輯和方法的集合前"也就意味著外觀模式調用了不止一個對象.如果是調用一個對象的多個方法,就成了建造者模式了.

  

建造者模式


定義了處理其他對象的復雜構建的對象設計.

比如如下類:

class Person
{
   private $name, $age;

   public function setName($name){
	$this->name = $name;
   }

   public function setAge($age) {
	$this->age = $name;
   }
}

如果我們要使該類"完整",必須調用setName和setAge.為了體現類的單一職責原則,使類看起來清晰明了.這時候我們可以使用建造者模式.

class Builder
{
    private $person;
    private $configs

    public function __construct($configs)
    {
	$this->person = new Person();
	$this->configs = $configs;
    }

    // 將person的多個方法都放在此方法中執行.
    public function build()
    {
	$this->person->setName($config[‘name‘]);
	$this->person->setAge($config[‘age‘]);
    }

    // 既然是建造者模式,建造完,還是要返回被建造對象,否則也算不上建造者模式.
    public function getPerson()
    {
	return $this->person;
    }
}

// 調用
$build = new Build(array(‘name‘ => ‘php‘, ‘age‘ => 10));
$build->build();
$person = $person->getPerson();

  

外觀模式/建造者模式