本篇文章帶給大家的內容是關於Java建造者模式是什麼?如何實現? (附代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
建造者模式(Builder Pattern)使用多個簡單的物件一步一步建構一個複雜的物件。
一個 Builder 類別會一步一步建構最終的對象,該類別獨立於其他對象。
建造者模式主要解決在軟體系統中,有時候面臨著"一個複雜物件"的創建工作,其通常由各個部分的子物件用一定的演算法構成;由於需求的變化,這個複雜物件的各個部分經常面臨劇烈的變化,但是將它們組合在一起的演算法卻相對穩定。
Builder:給出一個抽象接口,以規範產品物件的各個組成成分的建造。這個介面規定要實現複雜物件的哪些部分的創建,並不涉及具體的物件部件的創建。
ConcreteBuilder:實作Builder接口,針對不同的商業邏輯,具體化複雜物件的各部分的創建。在建造過程完成後,提供產品的實例。
Director:呼叫具體建造者來創建複雜物件的各個部分,在指導者中不涉及具體產品的信息,只負責保證對象各部分完整創建或按某種順序創建。
Product:要建立的複雜物件。
1、建立人類實體類別
package com.designpattern.builderPattern; /** * 对象 人 * * @author zhongtao on 2018/9/17 */ public class Human { private String head; private String body; private String hand; private String foot; public String getHead() { return head; } public void setHead(String head) { this.head = head; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } public String getHand() { return hand; } public void setHand(String hand) { this.hand = hand; } public String getFoot() { return foot; } public void setFoot(String foot) { this.foot = foot; } }
2、創建造人的Builder 介面
package com.designpattern.builderPattern; /** * 造人接口 规定造人的规范 需要头、身体、手、脚 * * @author zhongtao on 2018/9/17 */ public interface BuilderHuman { void buildHead(); void buildBody(); void buildHand(); void buildFoot(); /** * 返回创建的对象 */ Human createHuman(); }
3 、ConcreteBuilder 建立不同類型的人
tallPerson
package com.designpattern.builderPattern; /** * 高个子的人 * * @author zhongtao on 2018/9/17 */ public class TallPersonBuilder implements BuilderHuman { Human human; public TallPersonBuilder() { human = new Human(); } @Override public void buildHead() { human.setHead("普通的头脑"); } @Override public void buildBody() { human.setBody("壮实,高大的身体"); } @Override public void buildHand() { human.setHand("长手"); } @Override public void buildFoot() { human.setFoot("长脚"); } @Override public Human createHuman() { return human; } }
smartHuman
package com.designpattern.builderPattern; /** * 聪明的人 * * @author zhongtao on 2018/9/17 */ public class SmartHumanBuilder implements BuilderHuman { Human human; public SmartHumanBuilder() { human = new Human(); } @Override public void buildHead() { human.setHead("高智商的头脑"); } @Override public void buildBody() { human.setBody("健康的身体"); } @Override public void buildHand() { human.setHand("普通的手"); } @Override public void buildFoot() { human.setFoot("普通的脚"); } @Override public Human createHuman() { return human; } }
4、Director 建造者模式的核心呼叫具體建造者來創建不同的人
package com.designpattern.builderPattern; /** * 管理造人的顺序 BuilderHuman不同,则创建的人不同 * @author zhongtao on 2018/9/17 */ public class HumanDirector { public Human createHumanByDirector(BuilderHuman builderHuman){ builderHuman.buildHead(); builderHuman.buildBody(); builderHuman.buildHand(); builderHuman.buildFoot(); return builderHuman.createHuman(); } }
5、建造者模式測試
package com.designpattern.builderPattern; import org.junit.Test; /** * 测试 * * @author zhongtao on 2018/9/17 */ public class BuilderPatternTest { /** * 测试建造者模式 */ @Test public void test() { HumanDirector humanDirector = new HumanDirector(); //创建高个子的人 Human humanByDirector = humanDirector.createHumanByDirector(new TallPersonBuilder()); System.out.println(humanByDirector.getHead()); System.out.println(humanByDirector.getBody()); System.out.println(humanByDirector.getHand()); System.out.println(humanByDirector.getFoot()); System.out.println("------简单的分割线------"); //创建聪明的人 Human smartHuman = humanDirector.createHumanByDirector(new SmartHumanBuilder()); System.out.println(smartHuman.getHead()); System.out.println(smartHuman.getBody()); System.out.println(smartHuman.getHand()); System.out.println(smartHuman.getFoot()); } }
建造者獨立,易於擴展。
方便控制細節風險。
產品必須有共同點,範圍有限制。
如內部變化複雜,會有很多的建造類別。
與工廠模式的區別,建造者模式更加關注與零件組裝的順序。
以上是Java建造者模式是什麼?如何實現? (附代碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!