高內聚低耦合【代碼:ShoppingCart(一個類中提供多種操作購物車的方法體現高內聚)支付方式接口(信用卡類、微信支付類實現支付接口 體現低耦合)】

高內聚低耦合

?內聚指的是:?個模塊中各個元素之間的聯系的緊密程度,如果各個元素(語句、程序段)之間的聯系程度越?,則內聚性越?,即 “?內聚”。
低耦合指的是:軟件中各個層、模塊之間的依賴關聯程序越低越好。修改?處代碼, 其他模塊的代碼改動越少越好.

高內聚低耦合是軟件設計的重要原則,它可以提高代碼的可維護性和可擴展性。下面我將分別展示一個高內聚低耦合的Java代碼示例。

高內聚示例:

public class ShoppingCart {private List<Item> items;public void addItem(Item item) {// 添加商品到購物車}public void removeItem(Item item) {// 從購物車中移除商品}public double calculateTotal() {// 計算購物車中商品的總價}
}public class Item {private String name;private double price;// 省略構造函數和其他方法
}

在這個示例中,ShoppingCart 類負責管理購物車中的商品,它包含了添加商品、移除商品和計算總價的方法。Item 類表示購物車中的商品,它只包含商品的名稱和價格信息。這樣設計使得每個類都有清晰的職責,實現了高內聚。

低耦合示例:

public interface PaymentMethod {void pay(double amount);
}public class CreditCardPayment implements PaymentMethod {public void pay(double amount) {// 使用信用卡支付}
}public class CashPayment implements PaymentMethod {public void pay(double amount) {// 使用現金支付}
}public class Order {private PaymentMethod paymentMethod;public void setPaymentMethod(PaymentMethod paymentMethod) {this.paymentMethod = paymentMethod;}public void processPayment(double amount) {paymentMethod.pay(amount);}
}

在這個示例中,PaymentMethod 是一個接口,定義了支付的方法。CreditCardPayment 和 CashPayment 分別實現了 PaymentMethod 接口,分別表示信用卡支付和現金支付。Order 類包含了一個 PaymentMethod 對象,并且通過 setPaymentMethod 方法來設置支付方式,然后通過 processPayment 方法來進行支付。這樣設計使得 Order 類與具體的支付方式解耦,實現了低耦合。

這兩個示例展示了如何在Java中實現高內聚低耦合的代碼設計。希望對你有所幫助!

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

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

相關文章

第1章 物聯網模式簡介---獨特要求和體系結構原則

物聯網用例的獨特要求 物聯網用例往往在功耗、帶寬、分析等方面具有非常獨特的要求。此外&#xff0c;物聯網實施的固有復雜性&#xff08;一端的現場設備在計算上受到挑戰&#xff0c;另一端的云容量幾乎無限&#xff09;迫使架構師做出艱難的架構決策和實施選擇。可用實現技…

【自動調參】年化29.3%,最大回撤18.5%?:lightGBM的參數優化

原創文章第570篇&#xff0c;專注“AI量化投資、世界運行的規律、個人成長與財富自由"。 研報復現繼續&#xff1a;【研報復現】年化27.1%&#xff0c;人工智能多因子大類資產配置策略之benchmark 昨天調了一版參數&#xff0c;主要是lambda_l1, lambda_l2&#xff0c;防…

Vmvare12安裝CentOS7.6

Vmvare12安裝 注意事項 安裝完成以后有這兩個虛擬網卡。 CentOS官網鏡像地址 https://www.centos.org/download/mirrors/Vmvare安裝CentOS7.6 創建虛擬機 安裝CentOS7.6 選擇桌面版 磁盤分區 上述是確認使用自動分區。 設置密碼 設置license information 歡迎頁面 CentOS7…

使用Python實現網頁數據獲取與處理:以財經新聞為例

在現代數據驅動的世界中&#xff0c;獲取并處理豐富的網頁數據是非常重要的技能。本文將介紹如何使用Python編寫一個程序&#xff0c;自動獲取財經新聞數據并進行處理。這不僅可以幫助我們快速獲取最新的財經信息&#xff0c;還可以為后續的數據分析和研究提供支持。 環境準備…

寶蘭德受邀出席華為開發者大會2024,攜手共繪基礎軟件新篇章

6月21日-23日&#xff0c;華為開發者大會&#xff08;HDC 2024&#xff09;在東莞松山湖舉行&#xff0c;作為全球開發者的年度盛會&#xff0c;本次大會匯聚了眾多業界精英與前沿技術。華為分享了HarmonyOS、盤古大模型、昇騰AI云服務、GaussDB數據庫、自研倉頡編程語言等最新…

微信小程序錄音

微信小程序的錄音功能通過一組API來實現&#xff0c;主要涉及錄音管理器&#xff08;RecorderManager&#xff09;的使用。下面是詳細的實現步驟和代碼示例&#xff1a; 初始化錄音管理器 首先需要獲取錄音管理器的實例&#xff0c;可以通過 wx.getRecorderManager() 方法來獲…

【IM即時通信 功能介紹】客戶端用戶在線狀態訂閱

本文檔旨在介紹客戶端用戶在線狀態訂閱功能&#xff0c;該功能允許開發者通過 SDK 接口實時監控和接收指定用戶的在線或離線狀態變更通知。這一功能對于需要實時交流、狀態同步或用戶活動監控的應用場景至關重要。 功能特點 實時狀態通知 跨平臺通知&#xff1a;訂閱成功后&…

使用 MediaPipe 實現實時手部追蹤和手勢識別 | Rerun展示

點擊下方卡片&#xff0c;關注“小白玩轉Python”公眾號 在本文中&#xff0c;我將展示一個使用 MediaPipe Python 和 Rerun SDK 進行手部追蹤和手勢識別的示例。如果您有興趣深入了解并擴展您的知識&#xff0c;我將指導您如何安裝 MediaPipe Python 和 Rerun SDK 來進行手部追…

深入Scala的變量聲明與類型推斷:語法糖下的智能推導

Scala是一種靜態類型語言&#xff0c;以其強大的類型推斷系統而聞名。變量聲明和類型推斷是Scala編程中的基礎概念&#xff0c;它們共同簡化了代碼的編寫并提高了開發效率。本文將深入探討Scala中變量聲明的語法規則和類型推斷的工作原理。 1. Scala靜態類型的優越性 靜態類型…

深入理解Python中的*和**在函數參數與調用中的奧秘

深入理解Python中的*和**在函數參數與調用中的奧秘 在Python編程中&#xff0c;*和**這兩個操作符在函數參數和函數調用中扮演著特殊的角色。它們分別用于處理位置參數&#xff08;positional arguments&#xff09;和關鍵字參數&#xff08;keyword arguments&#xff09;&am…

Linux部署SVN

一.下載與安裝 &#xff08;1&#xff09;yum安裝 yum install subversion &#xff08;2&#xff09;源文件編譯安裝 ①下載svn源文件 subversion-xxx.tar.gz&#xff08;subversion 源文件&#xff09; subversion-deps-xxx.tar.gz&#xff08;subversion依賴文件&…

RAG項目工期

工期 第一期&#xff0c;基于term的檢索&#xff0c;大模型生成 第二期&#xff0c;搭建前端界面&#xff0c;落地 上傳pdf&#xff0c;一鍵解析&#xff0c;上傳多個pdf 提問 第三期&#xff0c;使用向量檢索&#xff0c;向量數據庫選型 第四期&#xff0c;優化排序。 te…

BatchNorm和LayerNorm

參考鏈接 參考鏈接 參考鏈接

項目四 OpenStack身份管理

任務一 理解身份服務 1.1 ?Keystone的基本概念 ? 認證 &#xff08; Authentication &#xff09; —— 確認用戶身份的過程 &#xff0c;又稱身份驗證 。 ? 憑證 &#xff08; Credentials &#xff09; —— 又 稱憑據&#xff0c;是用于 確認用戶身份的數據 。 ? 令牌…

短視頻最佳時長:成都柏煜文化傳媒有限公司

探索時間與內容之間的完美平衡 成都柏煜文化傳媒有限公司 在數字媒體日益繁榮的今天&#xff0c;短視頻已成為人們獲取信息、娛樂休閑的重要形式。然而&#xff0c;關于短視頻的最佳時長&#xff0c;一直是一個備受爭議的話題。本文將探討短視頻時長的各種考量因素&#xff0…

MySQL報錯Duplicate entry ‘0‘ for key ‘PRIMARY‘

報錯現場 現象解釋 因為你在插入時沒有給 Customer.Id 賦值&#xff0c;MySQL 會傾向于賦值為 NULL。但是主鍵不能為 NULL&#xff0c;所以 MySQL 幫了你一個忙&#xff0c;將值轉換為 0。這樣&#xff0c;在第二次插入時就會出現沖突&#xff08;如果已經有一條記錄為 0&…

微服務——服務治理

目錄 1 什么是服務治理&#xff1f;2 為什么需要服務治理&#xff1f;3 服務治理的關鍵點3.1 服務注冊與發現3.2 負載均衡3.3 容錯與熔斷3.4 服務監控與告警3.5 服務配置管理 4 示例說明5 總結 1 什么是服務治理&#xff1f; 簡單來說&#xff0c;服務治理就是對微服務架構中的…

iptables(11)target(SNAT、DNAT、MASQUERADE、REDIRECT)

簡介 前面我們已經介紹了ACCEPT、DROP、REJECT、LOG,這篇文章我們介紹SNAT、DNAT、MASQUERADE、REDIRECT,這幾個參數的定義我們在上篇文章中都有介紹,我這里再列出回顧一下 DNAT(目標地址轉換)和 SNAT(源地址轉換) 原理:修改數據包的源或目標 IP 地址。通常用于 NAT(…

怎樣利用 MATLAB 進行實時系統的建模與仿真?

要利用MATLAB進行實時系統的建模與仿真&#xff0c;您可以按照以下步驟進行操作&#xff1a; 確定系統的建模方法&#xff1a;根據實際情況&#xff0c;選擇適合的建模方法&#xff0c;如&#xff1a;微分方程、狀態空間模型、傳遞函數模型等。 編寫系統模型的MATLAB代碼&…

小迪安全v2023筆記 1-18

小迪安全v2023筆記 1-18 棱角社區 文章目錄 1. 基礎入門1. 正向shell與反向shell2. web應用3. 抓包&#xff0c;封包&#xff0c;協議&#xff0c;app&#xff0c;小程序&#xff0c;pc應用&#xff0c;web應用 2. 信息打點1. 常見信息獲取2. 文件泄露3. 常見阻礙4. CDN繞過&a…