士大夫v產生的

一、前言

亂碼七糟 [luàn qī bā zāo],我時常懷疑這個成語是來形容程序猿的! 無論承接什么樣的需求,是不是身邊總有那么幾個人代碼寫的爛,但是卻時常有測試小姐姐過來聊天(_求改bug_)、有產品小伙伴送吃的(_求寫需求_)、有業務小妹妹陪著改代碼(_求上線_),直至領導都認為他的工作很重要,而在旁邊的你只能蹭點吃的。 那你說,CRUD的代碼還想讓我怎么樣? 這樣的小伙伴,可能把代碼寫的很直接,ifelse多用一點,滿足于先臨時支持一下,想著這也沒什么的。而且這樣的業務需求要的急又都是增刪改查的內容,實在不想做設計。而如果有人提到說好好設計下,可能也會被反對不要過度設計。 貼膏藥似的修修補補,一次比一次恐怖! 第一次完成產品需求實在是很快,但互聯網的代碼不比傳統企業。在傳統行業可能一套代碼能用十年,但在互聯網高速的迭代下你的工程,一年就要變動幾十次。如果從一開始就想著只要完成功能就可以,那么隨之而來的是后續的需求難以承接,每次看著成片成片的代碼,實在不知如何下手。 在研發流程規范下執行,才能寫出好程序! 一個項目的上線往往要經歷業務需求、產品設計、研發實現、測試驗證、上線部署到正式開量,而這其中對研發非常重要的一環就是研發實現的過程,又可以包括為;架構選型、功能設計、設計評審、代碼實現、代碼評審、單測覆蓋率檢查、編寫文檔、提交測試。所以在一些流程規范下,其實很難讓你隨意開發代碼。 開發代碼的過程不是炫技,就像蓋房子如果不按照圖紙來修建,回首就在山墻上搭一個廚房衛浴!可能在現實場景中這很荒唐,但在功能開發中卻總有這樣的代碼。 **所以我們也需要一些設計模式的標準思想,去建設代碼結構,提升全局把控能力。**

[#](https://bugstack.cn/md/develop/design-pattern/2020-05-26-%E9%87%8D%E5%AD%A6Java%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E3%80%8A%E5%AE%9E%E6%88%98%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F%E3%80%8B.html#%E4%BA%8C%E3%80%81%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83)二、開發環境

  1. JDK 1.8
  2. Idea + Maven
  3. 涉及工程三個,可以通過關注**公眾號**:[bugstack蟲洞棧(opens new window)](https://bugstack.cn/assets/images/qrcode.png),回復源碼下載獲取(打開獲取的鏈接,找到序號18)
    工程描述
    itstack-demo-design-3-00場景模擬工程,模擬裝修過程中的套餐選擇(豪華、田園、簡約)
    itstack-demo-design-3-01使用一坨代碼實現業務需求,也是對ifelse的使用
    itstack-demo-design-3-02通過設計模式優化改造代碼,產生對比性從而學習

[#](https://bugstack.cn/md/develop/design-pattern/2020-05-26-%E9%87%8D%E5%AD%A6Java%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E3%80%8A%E5%AE%9E%E6%88%98%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F%E3%80%8B.html#%E4%B8%89%E3%80%81%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F%E4%BB%8B%E7%BB%8D)三、建造者模式介紹

![](https://img-blog.csdnimg.cn/b277c7a6ba034c84a2ed1a656f5c3114.png)

  • 圖片來自:[https://refactoringguru.cn/design-patterns/builder(opens new window)](https://refactoringguru.cn/design-patterns/builder)

**建造者模式所完成的內容就是通過將多個簡單對象通過一步步的組裝構建出一個復雜對象的過程。** 那么,哪里有這樣的場景呢? 例如你玩王者榮耀的時的初始化界面;有三條路、有樹木、有野怪、有守衛塔等等,甚至依賴于你的網絡情況會控制清晰度。而當你換一個場景進行其他不同模式的選擇時,同樣會建設道路、樹木、野怪等等,但是他們的擺放和大小都有不同。這里就可以用到建造者模式來初始化游戲元素。 而這樣的根據相同的物料,不同的組裝所產生出的具體的內容,就是建造者模式的最終意圖,也就是;**將一個復雜的構建與其表示相分離,使得同樣的構建過程可以創建不同的表示。**

[#](https://bugstack.cn/md/develop/design-pattern/2020-05-26-%E9%87%8D%E5%AD%A6Java%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E3%80%8A%E5%AE%9E%E6%88%98%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F%E3%80%8B.html#%E5%9B%9B%E3%80%81%E6%A1%88%E4%BE%8B%E5%9C%BA%E6%99%AF%E6%A8%A1%E6%8B%9F)四、案例場景模擬

![](https://img-blog.csdnimg.cn/8ff2c7f4e02945768a73b526dfd9a03b.png) **這里我們模擬裝修公司對于設計出一些套餐裝修服務的場景。** 很多裝修公司都會給出自家的套餐服務,一般有;歐式豪華、輕奢田園、現代簡約等等,而這些套餐的后面是不同的商品的組合。例如;一級&二級吊頂、多樂士涂料、圣象地板、馬可波羅地磚等等,按照不同的套餐的價格選取不同的品牌組合,最終再按照裝修面積給出一個整體的報價。 這里我們就模擬裝修公司想推出一些套餐裝修服務,按照不同的價格設定品牌選擇組合,以達到使用建造者模式的過程。

[#](https://bugstack.cn/md/develop/design-pattern/2020-05-26-%E9%87%8D%E5%AD%A6Java%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E3%80%8A%E5%AE%9E%E6%88%98%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F%E3%80%8B.html#_1-%E5%9C%BA%E6%99%AF%E6%A8%A1%E6%8B%9F%E5%B7%A5%E7%A8%8B)1. 場景模擬工程

itstack-demo-design-3-00
└── src└── main└── java└── org.itstack.demo.design├── ceilling│   ├── LevelOneCeiling.java│   └── LevelTwoCeiling.java├── coat│   ├── DuluxCoat.java│   └── LiBangCoat.java│   └── LevelTwoCeiling.java├── floor│   ├── DerFloor.java│   └── ShengXiangFloor.java├── tile│   ├── DongPengTile.java│   └── MarcoPoloTile.java└── Matter.java@小傅哥: 代碼已經復制到剪貼板

在模擬工程中提供了裝修中所需要的物料;ceilling(吊頂)、coat(涂料)、floor(地板)、tile(地磚),這么四項內容。(_實際的裝修物料要比這個多的多_)

[#](https://bugstack.cn/md/develop/design-pattern/2020-05-26-%E9%87%8D%E5%AD%A6Java%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E3%80%8A%E5%AE%9E%E6%88%98%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F%E3%80%8B.html#_2-%E5%9C%BA%E6%99%AF%E7%AE%80%E8%BF%B0)2. 場景簡述

[#](https://bugstack.cn/md/develop/design-pattern/2020-05-26-%E9%87%8D%E5%AD%A6Java%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E3%80%8A%E5%AE%9E%E6%88%98%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F%E3%80%8B.html#_2-1-%E7%89%A9%E6%96%99%E6%8E%A5%E5%8F%A3)2.1 物料接口
public interface Matter {String scene();      // 場景;地板、地磚、涂料、吊頂String brand();      // 品牌String model();      // 型號BigDecimal price();  // 價格String desc();       // 描述}@小傅哥: 代碼已經復制到剪貼板
  • 物料接口提供了基本的信息,以保證所有的裝修材料都可以按照統一標準進行獲取。

    [#](https://bugstack.cn/md/develop/design-pattern/2020-05-26-%E9%87%8D%E5%AD%A6Java%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E3%80%8A%E5%AE%9E%E6%88%98%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F%E3%80%8B.html#_2-2-%E5%90%8A%E9%A1%B6-ceiling)2.2 吊頂(ceiling)

    **一級頂**

    public class LevelOneCeiling implements Matter {public String scene() {return "吊頂";}public String brand() {return "裝修公司自帶";}public String model() {return "一級頂";}public BigDecimal price() {return new BigDecimal(260);}public String desc() {return "造型只做低一級,只有一個層次的吊頂,一般離頂120-150mm";}
    

}

    @小傅哥: 代碼已經復制到剪貼板

`**二級頂**`

public class LevelTwoCeiling implements Matter {

public String scene() {return "吊頂";
}public String brand() {return "裝修公司自帶";
}public String model() {return "二級頂";
}public BigDecimal price() {return new BigDecimal(850);
}public String desc() {return "兩個層次的吊頂,二級吊頂高度一般就往下吊20cm,要是層高很高,也可增加每級的厚度";
}

}

    @小傅哥: 代碼已經復制到剪貼板
`1`#### `[#](https://bugstack.cn/md/develop/design-pattern/2020-05-26-%E9%87%8D%E5%AD%A6Java%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E3%80%8A%E5%AE%9E%E6%88%98%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F%E3%80%8B.html#_2-3-%E6%B6%82%E6%96%99-coat)2.3 涂料(coat)`
`**多樂士
23
**立邦地板(floor)``**德爾**`

public class DerFloor implements Matter {

public String scene() {return "地板";
}public String brand() {return "德爾(Der)";
}public String model() {return "A+";
}public BigDecimal price() {return new BigDecimal(119);
}public String desc() {return "DER德爾集團是全球領先的專業木地板制造商,北京2008年奧運會家裝和公裝地板供應商";
}

}

    @小傅哥: 代碼已經復制到剪貼板
`**圣象**`

public class ShengXiangFloor implements Matter {

public String scene() {return "地板";
}public String brand() {return "圣象";
}public String model() {return "一級";
}public BigDecimal price() {return new BigDecimal(318);
}public String desc() {return "圣象地板是中國地板行業著名品牌。圣象地板擁有中國馳名商標、中國名牌、國家免檢、中國環境標志認證等多項榮譽。";
}

}

    @小傅哥: 代碼已經復制到剪貼板

#### `[#](https://bugstack.cn/md/develop/design-pattern/2020-05-26-%E9%87%8D%E5%AD%A6Java%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E3%80%8A%E5%AE%9E%E6%88%98%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F%E3%80%8B.html#_2-5-%E5%9C%B0%E7%A0%96-tile)2.5 地磚(tile)`
`**東鵬**`

public class DongPengTile implements Matter {

public String scene() {return "地磚";
}public String brand() {return "東鵬瓷磚";
}public String model() {return "10001";
}public BigDecimal price() {return new BigDecimal(102);
}public String desc() {return "東鵬瓷磚以品質鑄就品牌,科技推動品牌,口碑傳播品牌為宗旨,2014年品牌價值132.35億元,位列建陶行業榜首。";
}

}

    @小傅哥: 代碼已經復制到剪貼板

`**馬可波羅**`

public class MarcoPoloTile implements Matter {

public String scene() {return "地磚";
}public String brand() {return "馬可波羅(MARCO POLO)";
}public String model() {return "缺省";
}public BigDecimal price() {return new BigDecimal(140);
}public String desc() {return "“馬可波羅”品牌誕生于1996年,作為國內最早品牌化的建陶品牌,以“文化陶瓷”占領市場,享有“仿古磚至尊”的美譽。";
}

}

    @小傅哥: 代碼已經復制到剪貼板
- `上就是本次裝修公司所提供的裝修配置單,接下我們會通過案例去使用不同的物料組合出不同的套餐服務。`
## `[#](https://bugstack.cn/md/develop/design-pattern/2020-05-26-%E9%87%8D%E5%AD%A6Java%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E3%80%8A%E5%AE%9E%E6%88%98%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F%E3%80%8B.html#%E4%BA%94%E3%80%81%E7%94%A8%E4%B8%80%E5%9D%A8%E5%9D%A8%E4%BB%A3%E7%A0%81%E5%AE%9E%E7%8E%B0)五、用一坨坨代碼實現`
`講道理沒有ifelse解決不了的邏輯,不行就在加一行!`
`每一個章節中我們都會使用這樣很直白的方式去把功能實現出來,在通過設計模式去優化完善。這樣的代碼結構也都是非常簡單的,沒有復雜的類關系結構,都是直來直去的代碼。除了我們經常強調的這樣的代碼不能很好的擴展外,做一些例子demo工程還是可以的。`
### `[#](https://bugstack.cn/md/develop/design-pattern/2020-05-26-%E9%87%8D%E5%AD%A6Java%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E3%80%8A%E5%AE%9E%E6%88%98%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F%E3%80%8B.html#_1-%E5%B7%A5%E7%A8%8B%E7%BB%93%E6%9E%84)1. 工程結構`

itstack-demo-design-3-01 └── src └── main └── java └── org.itstack.demo.design └── DecorationPackageController.java

    @小傅哥: 代碼已經復制到剪貼板

``` 1 2 3 4 5 6 一個類幾千行的代碼你是否見過,嚯?那今天就讓你見識一下有這樣潛質的類!

**建造者模型結構** ![](https://img-blog.csdnimg.cn/b43877e98819491dab8526e301dd0e8e.png) 工程中有三個核心類和一個測試類,核心類是建造者模式的具體實現。與ifelse實現方式相比,多出來了兩個二外的類。具體功能如下;

  • Builder,建造者類具體的各種組裝由此類實現。

  • DecorationPackageMenu,是IMenu接口的實現類,主要是承載建造過程中的填充器。相當于這是一套承載物料和創建者中間銜接的內容。

  • [#](https://bugstack.cn/md/develop/design-pattern/2020-05-26-%E9%87%8D%E5%AD%A6Java%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E3%80%8A%E5%AE%9E%E6%88%98%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F%E3%80%8B.html#%E4%B8%83%E3%80%81%E6%80%BB%E7%BB%93)七、總結

  • 通過上面對建造者模式的使用,已經可以摸索出一點心得。那就是什么時候會選擇這樣的設計模式,當:一些基本物料不會變,而其組合經常變化的時候,就可以選擇這樣的設計模式來構建代碼。

  • 此設計模式滿足了單一職責原則以及可復用的技術、建造者獨立、易擴展、便于控制細節風險。但同時當出現特別多的物料以及很多的組合后,類的不斷擴展也會造成難以維護的問題。但這種設計結構模型可以把重復的內容抽象到數據庫中,按照需要配置。這樣就可以減少代碼中大量的重復。

  • 設計模式能帶給你的是一些思想,但在平時的開發中怎么樣清晰的提煉出符合此思路的建造模塊,是比較難的。需要經過一些鍛煉和不斷承接更多的項目,從而獲得這部分經驗。有的時候你的代碼寫的好,往往是倒逼的,復雜的業務頻繁的變化,不斷的挑戰!

本文由博客一文多發平臺 OpenWrite 發布!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/17253.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/17253.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/17253.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java 寫入 influxdb

利用Python隨機生成一個1000行的csv文件 import csv import random from datetime import datetime, timedelta from random import randint, choice# 定義監控對象列表和指標名稱列表 monitor_objects [Server1, Server2, Server3, DB1] metric_names [CPUUsage, MemoryUsa…

網絡編程 —— Http進度條

第一種下載帶進度的方法 string url "https://nodejs.org/dist/v20.10.0/node-v20.10.0-x64.msi"; 1使用getASync獲取服務器響應數據 參數1請求的路徑, 參數2 HttpCompletionOption.ResponseHeadersRead 請求完成時候等待請求帶什么程度才…

耐高溫輸送帶的優勢

耐高溫輸送帶:工業運輸的革命性升級,助力生產線高效穩定運行 在現代化工業生產的浪潮中,耐高溫輸送帶以其獨特的優勢,正逐漸成為工業運輸領域的得力助手。它不僅能夠有效提升生產效率,更能確保生產線的安全穩定運行&a…

算法隨想錄第二十天打卡|654.最大二叉樹 , 617.合并二叉樹 ,700.二叉搜索樹中的搜索 , 98.驗證二叉搜索樹

654.最大二叉樹 又是構造二叉樹,昨天大家剛剛做完 中序后序確定二叉樹,今天做這個 應該會容易一些, 先看視頻,好好體會一下 為什么構造二叉樹都是 前序遍歷 題目鏈接/文章講解:代碼隨想錄 視頻講解:又是構…

「動態規劃」打家劫舍

力扣原題鏈接,點擊跳轉。 有一個小偷,要偷東西。假設有n個房間,每個房間都有現金,下標為i的房間內的現金數是nums[i]。不能同時偷相鄰的2個房間,其中第一個房間和最后一個房間是相鄰的。那么這個小偷最多能偷到多少現…

YOLOv8+PyQt5鳥類檢測系統完整資源集合(yolov8模型,從圖像、視頻和攝像頭三種路徑識別檢測,包含登陸頁面、注冊頁面和檢測頁面)

資源包含可視化的鳥類檢測系統,基于最新的YOLOv8訓練的鳥類檢測模型,和基于PyQt5制作的可視化鳥類檢測系統,包含登陸頁面、注冊頁面和檢測頁面,該系統可自動檢測和識別圖片或視頻當中出現的各種鳥類,以及自動開啟攝像頭…

Linux漢化Jupyter Notebook

要在Linux系統中使Jupyter Notebook漢化,可以通過安裝jupyterlab-language-pack-zh-CN擴展來實現。以下是具體步驟和示例代碼: 打開終端。 執行以下命令以安裝Jupyter Notebook的中文語言包: pip install jupyterlab-language-pack-zh-CN …

【CSharp】將ushort數組保存為1通道位深16bit的Tiff圖片

【CSharp】將ushort數組保存為1通道位深16bit的Tiff圖片 1.背景2.接口 1.背景 System.Drawing.Common 是一個用于圖像處理和圖形操作的庫,它是 System.Drawing 命名空間的一部分。由于 .NET Core 和 .NET 5 的跨平臺特性,許多以前內置于 .NET Framework…

基于Fluent和深度學習算法驅動的流體力學計算與應用

“基于Fluent和深度學習算法驅動的流體力學計算與應用”專題大綱 目錄 主要內容 機器學習與流體力學入門 一、流體力學基礎理論與編程實戰1、流體力學的發展概述 2、不可壓縮流體力學的基本方程 3、湍流理論與湍流模型簡介 4、傅里葉變換和流體的尺度分析 5、偽譜法求解不可壓…

Vue小程序項目知識積累(二)

1.wx.reLaunch(Object object) 關閉所有頁面,打開到應用內的某個頁面。 wx.reLaunch({url:/pages/positons/index}) 參數說明: 屬性類型默認值必填說明urlstring是需要跳轉的應用內頁面路徑 (代碼包路徑),路徑后可以帶參數。參數與路徑之…

微信小程序上傳包過大的最全解決方案!

微信小程序的發布大小限制是2MB。然而一個程序怎么能這么小? 介紹一下項目中的經驗。 新項目 如果是剛開始做的新項目,一定確定好自己要用的Ui框架,而且確定之后,千萬不要引入別的,否則占大小!&#xff0…

HNCTF

HNCTF 文章目錄 HNCTFBabyPQEZmathez_Classicf(?*?)MatrixRSABabyAESIs this Iso? BabyPQ nc簽到題,跟端口連接拿到n和phin n 8336450100232098099043686671148282601664696810002345240872579498695511770993195704402414029892029461830476866385453475141207…

【開源】加油站管理系統 JAVA+Vue.js+SpringBoot+MySQL

目錄 一、項目介紹 論壇模塊 加油站模塊 汽油模塊 二、項目截圖 三、核心代碼 一、項目介紹 Vue.jsSpringBoot前后端分離新手入門項目《加油站管理系統》,包括論壇模塊、加油站模塊、汽油模塊、加油模塊和部門角色菜單模塊,項目編號T003。 【開源…

如何使用jQuery重定向到另一個網頁

在我們開始討論如何重定向到另一個網頁之前,必須明確一點:jQuery 是一個用于 DOM 操作的 JavaScript 庫,因此你不應該使用 jQuery 來實現頁面重定向。 jQuery 官方網站的某段話: 雖然 jQuery 可能能夠在較舊的瀏覽器版本中運行,但我們并沒有主動在這些版本中進行測試,也…

矩陣對角化在機器學習中的奧秘與應用

在機器學習的廣闊領域中,矩陣對角化作為一種重要的數學工具,扮演著不可或缺的角色。從基礎的線性代數理論到復雜的機器學習算法,矩陣對角化都在其中發揮著重要的作用。 矩陣對角化的概念與原理 矩陣對角化是矩陣理論中的一個基本概念&#x…

vue.config.js配置參考(2024-05-20)

vue.config.js 是一個可選的配置文件,如果項目的 (和 package.json 同級的) 根目錄中存在這個文件,那么它會被 vue/cli-service 自動加載。 你也可以使用 package.json 中的 vue 字段,但是注意這種寫法需要你嚴格遵照 JSON 的格式來寫。 這…

綜合布線管理軟件有何作用?

當客戶問及“綜合布線管理軟件究竟有何作用?” 我們通常這樣回答: 綜合布線管理軟件,作為運維管理的得力助手,其核心功能旨在確保布線系統的穩定運行與快速響應。 首先,這款軟件通過構建標準化的運維管理流程&#…

Qt for Android

文章 USB Qt for android 獲取USB設備列表(一)Java方式 獲取 Qt for android 獲取USB設備列表(二)JNI方式 獲取 Qt for android 串口庫使用 異常處理 Qt for Android 亂碼問題 andoid開發文檔 UsbManager(apiref.…

四川匯聚榮科技有限公司好不好?

在當今科技飛速發展的時代,企業要想在激烈的市場競爭中脫穎而出,不僅需要先進的技術支持,還需要優質的服務和良好的口碑。那么,四川匯聚榮科技有限公司是否具備這些條件呢?接下來,我們將從公司實力、服務質量、客戶反…

win10換ubuntu

1.首先是格式化windows系統,這里用的是恢復出廠設置 2.然后按照下面教程使用u盤來安裝ubuntuUbuntu 20.04.2.0 LTS 系統安裝過程詳解 (從下載鏡像到安裝系統)_ubuntu安裝教程20.04-CSDN博客 3.然后下面是一些別的準備工作: 1)安…