Java設計模式之建造者模式的示例詳解
定義
建造者模式(Builder Pattern),又叫生成器模式,是一種對象構建模式 它可以將復雜對象的建造過程抽象出來,使這個抽象過程的不同實現方法可以構造出不同表現的對象。建造者模式是一步一步創建一個復雜的對象,它允許用戶隻通過指定復雜對象的類型和內容就可 以構建它們,用戶不需要知道內部的具體構建細節。
案例
需求
女生每天化妝,假如隻需要做發型,香水,衣服,並要求按照發型——》香水——》衣服的順序進行,用代碼實現
方案一
定義女生抽象類
/** * 女生抽象類 * @author:liyajie * @createTime:2022/2/16 10:20 * @version:1.0 */ public abstract class AbstractWoman { //設計發型 public abstract void buildHairstyle(); //使用香水 public abstract void buildPerfume(); //設計衣服 public abstract void buildClothing(); }
定義女生實現類
/** * 女生實現類 * @author:liyajie * @createTime:2022/2/16 10:21 * @version:1.0 */ public class Woman extends AbstractWoman { @Override public void buildHairstyle() { System.out.println("馬尾造型"); } @Override public void buildPerfume() { System.out.println("古龍香水"); } @Override public void buildClothing() { System.out.println("海瀾之傢"); } }
測試類
/** * 測試類 * @author:liyajie * @createTime:2022/2/15 16:35 * @version:1.0 */ public class Test { public static void main(String[] args) { Woman woman = new Woman(); woman.buildHairstyle(); woman.buildPerfume(); woman.buildClothing(); System.out.println(woman); } }
查看測試結果
方案二
定義女生類
/** * 女生化妝 * @author:liyajie * @createTime:2022/2/15 15:40 * @version:1.0 */ @Data public class WomanNew { // 發型 private String hairstyle; // 香水 private String perfume; // 服裝 private String clothing; //化完妝後的展示效果 public void show(){ System.out.println("化妝完成"); } }
定義化妝師抽象類
/** * 化妝師抽象類 * @author:liyajie * @createTime:2022/2/15 15:58 * @version:1.0 */ public abstract class AbstractDresserNew { protected Woman woman = new Woman(); //設計發型 public abstract void buildHairstyle(); //使用香水 public abstract void buildPerfume(); //設計衣服 public abstract void buildClothing(); public Woman getWoman(){ return woman; } }
定義具體的化妝師類
/** * 具體的化妝師 * @author:liyajie * @createTime:2022/2/15 16:17 * @version:1.0 */ public class DresserNew extends AbstractDresserNew{ @Override public void buildHairstyle() { woman.setHairstyle("馬尾造型"); } @Override public void buildPerfume() { woman.setPerfume("古龍香水"); } @Override public void buildClothing() { woman.setClothing("海瀾之傢"); } }
定義化妝總設計師類(指揮者)
/** * 化妝總設計師(指揮者) * @author:liyajie * @createTime:2022/2/15 16:22 * @version:1.0 */ public class DresserManage { private AbstractDresser abstractDresser; public DresserManage(AbstractDresser abstractDresser){ this.abstractDresser = abstractDresser; } public Woman makeUp(){ abstractDresser.buildHairstyle(); abstractDresser.buildPerfume(); abstractDresser.buildClothing(); return abstractDresser.getWoman(); } }
定義測試類
/** * 測試類 * @author:liyajie * @createTime:2022/2/15 16:35 * @version:1.0 */ public class TestNew { public static void main(String[] args) { DresserNew dresser = new DresserNew(); DresserManage dresserManage = new DresserManage(dresser); WomanNew womanNew = dresserManage.makeUp(); System.out.println(womanNew); } }
查看結果
對比分析
- 方案一:普通的實現方式,采用瞭繼承抽象類的方式進行實現,耦合性非常高,不易擴展
- 方案二:建造者模式,將女生和化妝師化妝進行瞭解耦合,並且易擴展,更換化妝師也很方便;並且有一個化妝總設計師作為指揮者的角色,可以方便的控制化妝的順序,符合開閉原則
總結
建造者模式的優勢:
將產品本身與產品的創建過程解耦合
擴展性很高,很方便的增加或者替換具體建造者
方便用程序來控制產品的創建過程以及順序
指揮者類針對抽象建造者編程,系統擴展方便,符合開閉原則
註意點
建造者模式創建的產品一般組成部分類似,如果產品差異性非常大,不適合瞭,合理利用
如果產品內部變化復雜,導致系統非常龐大,權衡
到此這篇關於Java設計模式之建造者模式的示例詳解的文章就介紹到這瞭,更多相關Java建造者模式內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!