設計模式之建造者模式

2021-10-03 22:27:35 字數 2745 閱讀 4773

/**

* 建造者模式

* 將乙個複雜物件的建造與呼叫者分離。呼叫者只需要給出指定物件的型別和內容,建造者模式負責按照順尋建立複雜物件.

* 以買汽車為例,工廠負責製造汽車,你可以購買你所需要的汽車品牌和型號

* 指揮者(director):將複雜物件劃分為各個詳情物件的建造請求(廠長)

* 建造請求(builder):將複雜物件劃分為各個詳情物件的建造請求(輪子、座椅、發動機)

* 具體的建造者:建造屬於自己的產品部件(輪子製造人,座椅製造人,發動機製造人)

* 優點:易於解耦,將產品本身與建立的過程分離,可以使用相同的建立過程來建立不同的產品.

* 易於精確的控制物件,將複雜物件的建立劃分在不同的方法中,建立過程更加清晰

* 易於擴充套件,增加新的建造者無需修改原來的類庫

* 缺點:建造者模式的產品具有較多的共同點,組成部分類似。如果產品之間差異較大,則不適合

* 如果產品的內部變化複雜,需要定義更多具體的建造者來配合,導致系統變的龐大

*/

(1)builer.class.php 建造抽象父類(用於規範子類方法)

<?php

namespace builder;

// 抽象介面 定義裝配汽車的流水線

abstract class builder

(2)director.class.php 指揮類(用於指揮具體建造者工作)

<?php

namespace builder;

// 廠長安排工人裝配

class director

}

(3)car.class.php (具體產品類)

<?php

namespace builder;

class car

public function show()

print_r("組裝完畢");

}}

(4)concretebuiler.class.php(具體建造者1號,用於建造普通汽車)

<?php

namespace builder;

class concretebuilder extends builder

public function buildchair()

public function buildwheel()

public function buildengine()

public function getcar()

}

(5)concretebuiler.class.php(具體建造者2號,用於建造好汽車)

<?php

namespace builder;

class concretebuilder2 extends builder

public function buildwheel()

public function buildchair()

public function buildengine()

public function getcar()

}

(6)builder.class.php(客戶端)

<?php

/** * 建造者模式

* 將乙個複雜物件的建造與呼叫者分離。呼叫者只需要給出指定物件的型別和內容,建造者模式負責按照順尋建立複雜物件.

* 以買汽車為例,工廠負責製造汽車,你可以購買你所需要的汽車品牌和型號

* 指揮者(director):將複雜物件劃分為各個詳情物件的建造請求(廠長)

* 建造請求(builder):將複雜物件劃分為各個詳情物件的建造請求(輪子、座椅、發動機)

* 具體的建造者:建造屬於自己的產品部件(輪子製造人,座椅製造人,發動機製造人)

* 優點:易於解耦,將產品本身與建立的過程分離,可以使用相同的建立過程來建立不同的產品.

* 易於精確的控制物件,將複雜物件的建立劃分在不同的方法中,建立過程更加清晰

* 易於擴充套件,增加新的建造者無需修改原來的類庫

* 缺點:建造者模式的產品具有較多的共同點,組成部分類似。如果產品之間差異較大,則不適合

* 如果產品的內部變化複雜,需要定義更多具體的建造者來配合,導致系統變的龐大

*/spl_autoload_register(function ($classname));

use builder\director;

use builder\concretebuilder;

use builder\concretebuilder2;

// 指揮者

$director = new director();

// 具體建造者1

$builder = new concretebuilder();

$director->assemble($builder);

$car = $builder->getcar();

//var_dump($car);

// 具體建造者2

$builder2 = new concretebuilder2();

$director->assemble($builder2);

$car2 = $builder2->getcar();

var_dump($car2);

設計模式之建造者模式

軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟 設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設 計模式 和...

設計模式之建造者模式

建造者模式也叫生成器模式,是一種物件建立型模式,用來隱藏復合物件的建立過程,它把復合物件的建立過程加以抽象,通過子類繼承或過載的方式,動態的建立具有復合屬性的物件。應用場景 物件的建立 builder 模式是為物件的建立而設計的模式 建立的是乙個復合物件 被建立的物件為乙個具有復合屬性的復合物件 關...

設計模式之建造者模式

在做服務介面的時候,往往在業務處理之前需要做業務校驗,格式校驗等業務前處理。這些介面有個相同的特徵,就是必須經過這些處理步驟之後才能做核心的業務處理,拓展的服務介面也必須經過這些處理。基於這個特徵,我們就來分析一下設計模式中,建造者模式。我們先建乙個基礎的服務類 public abstract cl...