Java描述设计模式(06):建造者模式
一、生活場景
基于建造者模式,描述軟件開發的流程。
1、代碼實現
/*** 基于建造者模式描述軟件開發*/ public class C01_InScene {public static void main(String[] args) {BuilderSoft builderSoft = new SoftImpl () ;ProjectManager manager = new ProjectManager(builderSoft) ;manager.createSoft();} }/*** 手機軟件產品開發*/ class MobileSoft {// 設計private String design ;// 架構private String frame ;// 開發private String develop ;// 上線private String online ;// 省略 GET SET 方法 } /*** 手機軟件流程抽象類*/ abstract class BuilderSoft {// 前期工作public abstract void earlyWork () ;// 中期工作public abstract void midWork () ;// 后期工作public abstract void lateWork () ;// 手機軟件完成public abstract MobileSoft builderSoft () ; }/*** 手機軟件具體實現*/ class SoftImpl extends BuilderSoft {private MobileSoft mobileSoft = new MobileSoft();@Overridepublic void earlyWork() {System.out.println("軟件前期設計...");}@Overridepublic void midWork() {System.out.println("軟件中期架構...");System.out.println("軟件中期開發...");}@Overridepublic void lateWork() {System.out.println("軟件后期上線...");}@Overridepublic MobileSoft builderSoft() {return mobileSoft ;} } /*** 項目經理:把控項目進度*/ class ProjectManager {private BuilderSoft builderSoft ;ProjectManager (BuilderSoft builderSoft){this.builderSoft = builderSoft ;}// 統籌項目周期public void createSoft (){builderSoft.earlyWork();builderSoft.midWork();builderSoft.lateWork();// MobileSoft mobileSoft = builderSoft.builderSoft() ;// return mobileSoft ;} }2、代碼結構圖
二、建造者模式
1、基礎概念
建造模式是對象的創建模式。建造模式可以將一個產品的內部屬性描述與產品的生產過程分割,從而可以使一個建造過程生成具有不同的內部表象的產品對象。也就是使用一個中介對象封裝一系列的對象交互,使其各個對象不需要顯示的相互調用,而且可以單獨的改變對象之間的交互。
2、核心角色
1)、抽象建造者(Builder)角色
給出一個抽象接口,以規范產品對象的各個組成成分的建造。模式中直接創建產品對象的是具體建造者角色。
2)、具體建造者(ConcreteBuilder)角色
完成的任務包括:1.實現抽象建造者Builder所聲明的接口,給出完成創建產品實例的操作。2.在建造完成后,提供產品的實例。
3)、導演者(Director)角色
擔任這個角色的類調用具體建造者角色以創建產品對象。
4)、產品(Product)角色
產品便是建造的對象。一般來說,一個系統中會有多個產品類,而且這些產品類并不一定有共同的接口,而完全可以是不相關聯的。
3、模式圖解
4、源碼實現
/*** 建造者模式代碼*/ public class C02_Builder {public static void main(String[] args) {Builder builder = new ConcreteBuilder();Director director = new Director(builder);director.construct();Product product = builder.builderProduct();System.out.println(product.getAct1());System.out.println(product.getAct2());} } /*** 產品類*/ class Product {/*定義一些產品的操作*/private String act1;private String act2;public String getAct1() {return act1;}public void setAct1(String act1) {this.act1 = act1;}public String getAct2() {return act2;}public void setAct2(String act2) {this.act2 = act2;} } /*** Builder 抽象建造者類*/ abstract class Builder{public abstract void builderact1();public abstract void builderact2();public abstract Product builderProduct(); } /*** 具體建造者類*/ class ConcreteBuilder extends Builder{private Product product = new Product();@Overridepublic void builderact1() {product.setAct1("操作一:執行...");}@Overridepublic void builderact2() {product.setAct2("操作二:執行...");}@Overridepublic Product builderProduct() {return product;} } /*** Director 導演者類*/ class Director{/*使用建造者抽象類*/private Builder builder;Director(Builder builder){this.builder = builder;}/*負責調用各個建造方法*/public void construct(){builder.builderact1();builder.builderact2();} }三、實際應用
1、JDK中應用
分析
1)、Appendable定義多個append() 抽象方法,抽象建造者。
2)、AbstractStringBuilder實現Appendable接口,已經作為了建造者,只是抽象類無法實例化。
3)、StringBuilder繼承AbstractStringBuilder,即作為具體建造者,也作為指揮者。
2、Spring中應用
源碼實現
// 系列方法 public BeanDefinitionBuilder setParentName(String parentName); public BeanDefinitionBuilder setFactoryMethod(String factoryMethod); public BeanDefinitionBuilder setFactoryMethodOnBean(String factoryMethod, String factoryBean); public BeanDefinitionBuilder addConstructorArgValue(@Nullable Object value); public BeanDefinitionBuilder addConstructorArgReference(String beanName); public BeanDefinitionBuilder addPropertyValue(String name, @Nullable Object value); // 構建Bean public AbstractBeanDefinition getRawBeanDefinition() {return this.beanDefinition; } public AbstractBeanDefinition getBeanDefinition() {this.beanDefinition.validate();return this.beanDefinition; }上面兩處建造者模式的實際應用,都有點形散而神不散的感覺。
四、優缺點分析
- 優點:減少類之間的相互依賴,降低耦合度。
- 缺點:ConcreateBuilder變得臃腫龐大,邏輯復雜。
五、源代碼地址
GitHub地址:知了一笑 https://github.com/cicadasmile 碼云地址:知了一笑 https://gitee.com/cicadasmile
總結
以上是生活随笔為你收集整理的Java描述设计模式(06):建造者模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS 动画总结----UIView动画
- 下一篇: java美元兑换,(Java实现) 美元