成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一篇帶你了解建造者模式

開發(fā) 前端
將多個簡單對象一步步的按照特定順序創(chuàng)建出一個復(fù)雜對象。主要解決"復(fù)雜對象"的構(gòu)建構(gòu)成工作,這個"復(fù)雜對象"由多個子對象按照一定規(guī)則組成。

[[413733]]

本文轉(zhuǎn)載自微信公眾號「我好困啊」,作者mengxin。轉(zhuǎn)載本文請聯(lián)系我好困啊公眾號。

建造者模式:

將多個簡單對象一步步的按照特定順序創(chuàng)建出一個復(fù)雜對象。

意圖

將一個復(fù)雜對象的構(gòu)建過程與其表示分離。

主要解決

主要解決"復(fù)雜對象"的構(gòu)建構(gòu)成工作,這個"復(fù)雜對象"由多個子對象按照一定規(guī)則組成。

關(guān)鍵代碼

建造者:將多個子對象進行組裝。

使用場景

復(fù)雜對象由多個子對象組成。

代碼實現(xiàn)

代碼主要功能:定義兩個子對象cat,dog,將這兩個子對象通過建造者組裝成對應(yīng)的復(fù)雜對象pet。

1.定義各類"產(chǎn)品"

構(gòu)建抽象產(chǎn)品接口

  1.  1/** 
  2.  2 * 抽象商品接口 
  3.  3 */ 
  4.  4public interface Item { 
  5.  5 
  6.  6    //商品名稱 
  7.  7    public String name(); 
  8.  8    //商品價格 
  9.  9    public Float price(); 
  10. 10    //默認行為 
  11. 11    public String canDO(); 
  12. 12} 

構(gòu)建"cat"產(chǎn)品

  1. 1/** 
  2. 2 * Cat產(chǎn)品抽象類 
  3. 3 * 提供Cat默認行為 
  4. 4 */ 
  5. 5public abstract class Cat implements Item{ 
  6. 7    public String canDO(){ 
  7. 8        return "miaomiao...."
  8. 9    } 
  9. 0} 

bigCat

  1.  1/** 
  2.  2 * big cat 
  3.  3 */ 
  4.  4public class BigCat extends Cat{ 
  5.  5    @Override 
  6.  6    public String name() { 
  7.  7        return "big cat"
  8.  8    } 
  9.  9 
  10. 10    @Override 
  11. 11    public Float price() { 
  12. 12        return 500.0f; 
  13. 13    } 
  14. 14} 

smallCat

  1.  1public class SmallCat extends Cat{ 
  2.  2    @Override 
  3.  3    public String name() { 
  4.  4        return "small cat"
  5.  5    } 
  6.  6 
  7.  7    @Override 
  8.  8    public Float price() { 
  9.  9        return 100.0f; 
  10. 10    } 
  11. 11} 

構(gòu)建"dog"產(chǎn)品

  1. 1/** 
  2. 2 * Dog產(chǎn)品抽象類 
  3. 3 * 提供dog默認行為 
  4. 4 */ 
  5. 5public abstract class Dog implements Item{ 
  6. 7    public String canDO(){ 
  7. 8        return "wangwang...."
  8. 9    } 
  9. 0} 

bigDog

  1.  1/** 
  2.  2 * big dog 
  3.  3 */ 
  4.  4public class BigDog extends Dog{ 
  5.  5    @Override 
  6.  6    public String name() { 
  7.  7        return "big dog"
  8.  8    } 
  9.  9 
  10. 10    @Override 
  11. 11    public Float price() { 
  12. 12        return 1000.0f; 
  13. 13    } 
  14. 14} 

SmallDog

  1.  1/** 
  2.  2 * small dog 
  3.  3 */ 
  4.  4public class SmallDog extends Dog{ 
  5.  5    @Override 
  6.  6    public String name() { 
  7.  7        return "small dog"
  8.  8    } 
  9.  9 
  10. 10    @Override 
  11. 11    public Float price() { 
  12. 12        return 200.0f; 
  13. 13    } 
  14. 14} 

2.定義抽象"套餐"

構(gòu)建"pet"套餐

  1.  1/** 
  2.  2 * 寵物 
  3.  3 */ 
  4.  4public class Pet { 
  5.  5 
  6.  6    private List<Item> list = new ArrayList<>(); 
  7.  7 
  8.  8    //添加商品 
  9.  9    public void addItem(Item item){ 
  10. 10        list.add(item); 
  11. 11    } 
  12. 12 
  13. 13    //獲取所選寵物價格 
  14. 14    public float getCost(){ 
  15. 15        float cost = 0.0f; 
  16. 16        for (Item item : list) { 
  17. 17            cost += item.price(); 
  18. 18        } 
  19. 19        return cost; 
  20. 20    } 
  21. 21 
  22. 22    public void showPet(){ 
  23. 23        for (Item item : list) { 
  24. 24            System.out.print("Item : "+item.name()); 
  25. 25            System.out.print(", speak : "+item.canDO()); 
  26. 26            System.out.println(", Price : "+item.price()); 
  27. 27        } 
  28. 28    } 
  29. 29 
  30. 30} 

3.定義建造者將"產(chǎn)品"按照特定順序構(gòu)建成特定"套餐"

構(gòu)建創(chuàng)建者,創(chuàng)建對應(yīng)"套餐"

  1.  1/** 
  2.  2 * 建造者: 
  3.  3 * 將現(xiàn)有的商品按照特點順序組裝成特定"套裝" 
  4.  4 */ 
  5.  5public class PetBuilder { 
  6.  6 
  7.  7    //組裝大寵物套裝 
  8.  8    public Pet buildBigPet(){ 
  9.  9        Pet pet = new Pet(); 
  10. 10        pet.addItem(new BigCat()); 
  11. 11        pet.addItem(new BigDog()); 
  12. 12        return pet; 
  13. 13    } 
  14. 14 
  15. 15    //組裝小寵物套裝 
  16. 16    public Pet buildSmallPet(){ 
  17. 17        Pet pet = new Pet(); 
  18. 18        pet.addItem(new SmallDog()); 
  19. 19        pet.addItem(new SmallCat()); 
  20. 20        return pet; 
  21. 21    } 
  22. 22 
  23. 23} 

測試:

  1.  1/** 
  2.  2 * 測試建造者模式 
  3.  3 */ 
  4.  4public class Main { 
  5.  5 
  6.  6    public static void main(String[] args) { 
  7.  7        PetBuilder petBuilder = new PetBuilder(); 
  8.  8        //調(diào)用建造者構(gòu)建Big套裝 
  9.  9        Pet bigPet = petBuilder.buildBigPet(); 
  10. 10        System.out.println("Big pet...."); 
  11. 11        bigPet.showPet(); 
  12. 12        System.out.println("Total cost:"+bigPet.getCost()); 
  13. 13 
  14. 14        //調(diào)用建造者構(gòu)建Small套裝 
  15. 15        Pet smallPet = petBuilder.buildSmallPet(); 
  16. 16        System.out.println("Small pet...."); 
  17. 17        smallPet.showPet(); 
  18. 18        System.out.println("Total cost:"+smallPet.getCost()); 
  19. 19    } 
  20. 20} 

 

注意事項:與工廠模式的區(qū)別是:建造者模式更加關(guān)注與零件裝配的順序。

 

責任編輯:武曉燕 來源: 我好困啊
相關(guān)推薦

2021-05-11 08:54:59

建造者模式設(shè)計

2021-05-20 06:57:16

RabbitMQ開源消息

2022-03-07 06:34:22

CQRS數(shù)據(jù)庫數(shù)據(jù)模型

2021-11-24 08:51:32

Node.js監(jiān)聽函數(shù)

2021-08-02 06:34:55

Redis刪除策略開源

2021-11-08 08:42:44

CentOS Supervisor運維

2021-12-15 11:52:34

GPLLinuxGNU

2023-05-12 08:19:12

Netty程序框架

2021-06-30 00:20:12

Hangfire.NET平臺

2021-07-14 08:24:23

TCPIP 通信協(xié)議

2021-08-11 07:02:21

npm包管理器工具

2023-06-16 07:41:36

分層架構(gòu)軟件架構(gòu)

2021-07-14 10:08:30

責任鏈模式加工鏈

2023-09-06 14:57:46

JavaScript編程語言

2020-12-08 08:09:49

SVG圖標Web

2021-05-18 08:30:42

JavaScript 前端JavaScript時

2021-06-24 09:05:08

JavaScript日期前端

2021-09-27 09:18:30

ListIterato接口方法

2021-01-26 23:46:32

JavaScript數(shù)據(jù)結(jié)構(gòu)前端

2021-03-05 18:04:15

JavaScript循環(huán)代碼
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 精品9999| 欧美精品video | 国产精品久久久久久久免费大片 | www.夜夜骑| 欧美亚洲一区二区三区 | 日韩欧美第一页 | 一区二区三区电影网 | 国产精品视频不卡 | 日韩精品在线一区 | 欧美炮房 | 欧美一区二区三区在线观看 | 日韩欧美国产精品一区二区三区 | 欧美精品中文 | 久久69精品久久久久久国产越南 | 日日欧美 | 亚洲一区视频在线 | 一级片视频免费观看 | av网站在线看 | 香蕉91 | 日本爱爱 | 亚洲天堂成人在线视频 | 午夜日韩视频 | 欧美日韩在线观看一区二区三区 | 亚洲免费在线视频 | 久久精品二区亚洲w码 | 久久精品一区 | 国产在线激情视频 | 国产成人av免费看 | 日韩欧美国产一区二区三区 | 亚洲色视频 | 欧美精品中文 | 三级成人在线 | 国产欧美在线播放 | 国产精品99久久久久久久久 | 日韩国产在线观看 | 在线观看av网站永久 | 成人在线视频一区 | 亚洲成人一区 | 天堂久 | 男人av在线| 日本黄色片免费在线观看 |