Java學習筆記---設計模式之建造者模式(一),學習筆記設計模式

來源:互聯網
上載者:User

Java學習筆記---設計模式之建造者模式(一),學習筆記設計模式
一、引言

        每天進步一點點,每天快樂一點點。堅持每天寫點東西,感覺很好,既複習基礎知識,又可以收穫一份成就感,何樂而不為呢?設計模式是一個菜鳥成為一個高手必須要掌握的東西,因此我們今天的話題就是設計模式之建造者模式。

二、什麼是建造者模式

         將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。

三、建造者模式類圖

         類圖是一個很重要的理解設計模式的工具,因此必須很好的理解。

         

四、建造者模式中的角色

          1、Builder:給出一個抽象介面,規範建造者對於生產的產品的各個組成部分的建造。這個介面只是定一個規範,不涉及具體的建造,具體的建造讓繼承於它的子類(ConcreteBuilder)去實現。
          2、ConcreteBuilder:實現builder介面,針對不同的商業邏輯,具體化各對象部分的建造,最後返回一個建造好的產品。
          3、Director:導演,顧名思義,負責規範流程之用。在指導中不涉及產品的建立,只負責保證複雜物件各部分被建立或按某種順序建立。
          4、Product:複雜物件。也是被建造的對象

五、舉例說明

工程結構圖:


AbstractCar.java

package designModeBulder;//抽象產品類public abstract class AbstractCar {abstract public void seat();//建造座位abstract public void light();//建造燈光abstract public void wheel();//建造輪子abstract public void engine();//建造發動機//預設流程public void defaultCar(){seat();light();wheel();engine();}}
BenchiCar.java

package designModeBulder;public class BenChiCar extends AbstractCar{@Overridepublic void seat() {// TODO Auto-generated method stubSystem.out.println("平治車建造了座椅");}@Overridepublic void light() {// TODO Auto-generated method stubSystem.out.println("平治車建造了燈光");}@Overridepublic void wheel() {// TODO Auto-generated method stubSystem.out.println("平治車建造了輪子");}@Overridepublic void engine() {// TODO Auto-generated method stubSystem.out.println("平治車建造了發動機");}}
BmwCar.java

package designModeBulder;public class BmwCar extends AbstractCar {@Overridepublic void seat() {// TODO Auto-generated method stubSystem.out.println("寶馬建造了座位");}@Overridepublic void light() {// TODO Auto-generated method stubSystem.out.println("寶馬建造了燈光");}@Overridepublic void wheel() {// TODO Auto-generated method stubSystem.out.println("寶馬建造了輪子");}@Overridepublic void engine() {// TODO Auto-generated method stubSystem.out.println("寶馬建造了發動機");}}
ICarBuilder.java

package designModeBulder;//抽象建造者public interface ICarBuilder {public void buildCar();public AbstractCar getCar();}
BenchiCarBuilder.java

package designModeBulder;public class BenChiCarBuilder implements ICarBuilder {BenChiCar benChiCar=new BenChiCar();//先建立一輛空白的平治車@Overridepublic void buildCar() {// TODO Auto-generated method stubbenChiCar.wheel();//先建造輪子benChiCar.engine();//再造發動機benChiCar.light();//造燈光benChiCar.seat();//建造座位}@Overridepublic AbstractCar getCar() {// TODO Auto-generated method stubreturn this.benChiCar;//建好了一輛平治}}
BmwCarBuilder.java

package designModeBulder;public class BmwCarBuilder implements ICarBuilder{BmwCar bmwCar = new BmwCar();@Overridepublic void buildCar() {// TODO Auto-generated method stubbmwCar.wheel();bmwCar.engine();bmwCar.seat();bmwCar.light();}@Overridepublic AbstractCar getCar() {// TODO Auto-generated method stubreturn this.bmwCar;}}
CarDirector.java

package designModeBulder;//導演類角色public class CarDerictor {BenChiCarBuilder benChiCarBuilder = new BenChiCarBuilder();//擁有建造平治車的師傅BmwCarBuilder bmwCarBuilder= new BmwCarBuilder();//擁有建造寶馬車的師傅public AbstractCar getbenCar() {benChiCarBuilder.buildCar();return benChiCarBuilder.getCar();}public AbstractCar getBmaCar(){bmwCarBuilder.buildCar();return bmwCarBuilder.getCar();}}
BuilderTest.java

package designModeBulder;public class BuidlerTest {public static void main(String args[]){CarDerictor carDerictor = new CarDerictor();BenChiCar benChiCar =(BenChiCar)carDerictor.getbenCar();BmwCar bmwCar = (BmwCar)carDerictor.getBmaCar();}}

運行結果:

平治車建造了輪子
平治車建造了發動機
平治車建造了燈光
平治車建造了座椅
寶馬建造了輪子
寶馬建造了發動機
寶馬建造了座位
寶馬建造了燈光

六、總結

         使用建造者模式可以使用戶端不必知道產品內部組成的細節,如例子中我們就不需要關心每一個具體的模型內部是如何?的,產生的物件類型就是AbstractCar.建造者之間是相互獨立的,易於擴充。其適用情境:相同的方法,不同的執行順序,產生不同的事件結果時,可以採用建造者模式;多個組件或零件,都可以裝配到一個對象中,但是產生的運行結果又不相同時,則可以使用該模式;產品類非常複雜,或者產品類中的調用順序不同產生了不同的效能,這個時候使用建造者模式是非常合適。 在對象建立過程中會使用到系統中的一些其它對象,這些對象在產品對象的建立過程中不易得到時,也可以採用建造者模式封裝該對象的建立過程。該種情境,只能是一個補償方法,因為一個對象不容易獲得,而在設計階段竟然沒有發覺,而要通過建立者模式柔化建立過程,本身已經違反設計最初目標。

一篇很不錯的文章可以參考這裡。








著作權聲明:本文為博主原創文章,未經博主允許不得轉載。討論QQ群:372702757

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.