日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

詳解Java中的五種設計模式

來源: 責編: 時間:2023-09-22 20:11:19 419觀看
導讀設計模式是一種可重用的解決方案,用于解決軟件設計中常見的問題。不同類型的設計模式針對解決不同的特定問題或問題組合。如下圖所示,一些常見的設計模式類型包括處理對象創建的創建型模式;處理對象組合和組織的結構型模

x8228資訊網——每日最新資訊28at.com

本文分享幾種與Java中常用的創建型設計模式相關的代碼示例。x8228資訊網——每日最新資訊28at.com

創建型設計模式

創建型設計模式提供了各種對象創建機制,從而增加了現有代碼的靈活性和重用性。x8228資訊網——每日最新資訊28at.com

其主要功能是以最佳方式提供非常具體的解決方案。它們可以進一步分為以下類別。x8228資訊網——每日最新資訊28at.com

1. 單例

單例是一種創建型設計模式,它確保一個類只有一個實例,并提供對該實例的全局訪問點。x8228資訊網——每日最新資訊28at.com

x8228資訊網——每日最新資訊28at.com

單例模式基于對象只有一個實例的概念,從而實現對資源的全局控制。簡而言之,單例設計模式確保只創建一個類的實例,并且該實例在應用程序內可以全局訪問。x8228資訊網——每日最新資訊28at.com

public class SingletonClass {    private static SingletonClass instance;    private SingletonClass() {        // 私有構造函數,防止外部實例化    }    public static SingletonClass getInstance() {        if (instance == null) {            instance = new SingletonClass();        }        return instance;    }}

如下所示,當我們發送Postman請求時,控制器類和結果將是同一個實例:x8228資訊網——每日最新資訊28at.com

@RestController@RequestMapping("/api")public class SingletonController  {    private SingletonClass singletonClass;    public SingletonController(SingletonClass singletonClass) {        this.singletonClass = singletonClass;    }    @GetMapping("/singleton")    public String getSingleton() {        return "This is a singleton instance: " + singletonClass.toString();    }}

x8228資訊網——每日最新資訊28at.com

當您想要確保類僅存在一個實例時(例如,由程序的不同部分共享的單個數據庫對象),您應該使用單例設計模式。x8228資訊網——每日最新資訊28at.com

2. 工廠

工廠方法是一種創建型設計模式,它提供了一種在創建過程中無需指定其具體類即可創建產品對象的解決方案。x8228資訊網——每日最新資訊28at.com

x8228資訊網——每日最新資訊28at.com

以下是Java代碼示例,PaymentProcessor是定義處理付款的合同的接口。x8228資訊網——每日最新資訊28at.com

public interface PaymentProcessor {    void processPayment();}

CreditCardPaymentProcessor和PaypalPaymentProcessor是實現PaymentProcessor接口的具體類。這些類為CreditCard和PayPal付款特定的processPayment()方法提供了實現。x8228資訊網——每日最新資訊28at.com

@Servicepublic class CreditCardPaymentProcessor implements PaymentProcessor {    @Override    public void processPayment() {        // 信用卡支付交易    }}@Servicepublic class PaypalPaymentProcessor implements PaymentProcessor {    @Override    public void processPayment() {        //  PayPal支付交易    }}

PaymentProcessorFactory是實現工廠設計模式的工廠類。該類負責根據給定的付款方式創建不同PaymentProcessor實現的實例。x8228資訊網——每日最新資訊28at.com

@Componentpublic class PaymentProcessorFactory {    private final CreditCardPaymentProcessor creditCardPaymentProcessor;    private final PaypalPaymentProcessor paypalPaymentProcessor;    public PaymentProcessorFactory(CreditCardPaymentProcessor creditCardPaymentProcessor,                                   PaypalPaymentProcessor paypalPaymentProcessor) {        this.creditCardPaymentProcessor = creditCardPaymentProcessor;        this.paypalPaymentProcessor = paypalPaymentProcessor;    }    public PaymentProcessor createPaymentProcessor(String paymentMethod) {        if (paymentMethod.equalsIgnoreCase("creditcard")) {           return creditCardPaymentProcessor;        } else if (paymentMethod.equalsIgnoreCase("paypal")) {            return paypalPaymentProcessor;        }        throw new IllegalArgumentException("Invalid payment method: " + paymentMethod);    }}

入口點處理對/processPayment/{paymentMethod}的請求,并使用PaymentProcessorFactory根據提供的paymentMethod創建適當的付款處理器。這簡化了代碼并使添加新付款處理器變得容易。x8228資訊網——每日最新資訊28at.com

x8228資訊網——每日最新資訊28at.com

工廠方法是一種用于節省系統資源的設計模式,它通過重復使用現有對象而不是重復構建它們來實現這一目的。x8228資訊網——每日最新資訊28at.com

3. 抽象工廠

抽象工廠是一種創建型設計模式,它允許您生成相關對象系列,無需指定其具體類。x8228資訊網——每日最新資訊28at.com

x8228資訊網——每日最新資訊28at.com

以下是Java代碼示例:x8228資訊網——每日最新資訊28at.com

//工廠類public interface ProductFactory {    Product createProduct();}public class ProductAFactory implements ProductFactory{    @Override    public Product createProduct() {        return new ProductA();    }}public class ProductBFactory implements ProductFactory{    @Override    public Product createProduct() {        return new ProductB();    }}
//產品類public interface Product {    String getName();}public class ProductA implements Product {    @Override    public String getName() {        return "Product A";    }}public class ProductB implements Product {    @Override    public String getName() {        return "Product B";    }}// 使用 ProductAFactory 創建產品 AProductFactory productAFactory = new ProductAFactory();Product productA = productAFactory.createProduct();System.out.println("Product A: " + productA.getName());// 使用 ProductBFactory 創建產品 BProductFactory productBFactory = new ProductBFactory();Product productB = productBFactory.createProduct();System.out.println("Product B: " + productB.getName());

抽象工廠模式在處理不同組相關項目時非常有用,它可以避免代碼依賴于這些項目的特定類型。您可能事先不知道這些類型,或者希望為將來添加更多類型留出空間。這樣,您的代碼可以更加靈活和可擴展。x8228資訊網——每日最新資訊28at.com

4. Builder

Builder是一種創建型設計模式,它允許您以逐步構建的方式創建復雜的對象。通過使用Builder模式,您可以使用相同的構建代碼來生成不同類型和表示形式的對象。這種靈活性使得對象的構建過程更加可控和可定制。x8228資訊網——每日最新資訊28at.com

x8228資訊網——每日最新資訊28at.com

以下是Java代碼示例::x8228資訊網——每日最新資訊28at.com

@Builder@Getter@Setterpublic class Beer {    //必填屬性    private String name;    private double drinkSize;    private double alcoholPercentage;    private double price;    // 其他屬性    private String brewery;            // 生產啤酒的釀酒廠    private String countryOfOrigin;    // 啤酒原產國    private String description;        // 對啤酒特點的簡要描述    private String packaging;          // 包裝類型(瓶裝、罐裝、生啤等)    private String servingTemperature; // 推薦的飲用溫度    private String foodPairing;        // 適合搭配該啤酒的食物}
@RestController@RequestMapping("/api/beers")public class BeerController {    @GetMapping("/basic")    public String createStandardBeer() {        Beer beer = Beer.builder()                .name("Standard Beer")                .drinkSize(500)                .alcoholPercentage(5.0)                .price(5.99)                .build();        return "Created beer: " + beer.getName() +                 ", Drink Size: " + beer.getDrinkSize() +                ", Alcohol Percentage: " + beer.getAlcoholPercentage() +                ", Price: " + beer.getPrice();    }    @GetMapping("/premium")    public String createPremiumBeer() {        Beer beer = Beer.builder()                .name("Sample Beer")                .drinkSize(330)                .alcoholPercentage(5.0)                .price(10.99)                .brewery("Crafty Brews")                .countryOfOrigin("United States")                .description("A refreshing lager with a smooth taste.")                .packaging("Bottle")                .servingTemperature("4-6°C")                .foodPairing("Pairs well with grilled chicken and salads.")                .build();        return "Created beer: " + beer.getName() +                 ", Drink Size: " + beer.getDrinkSize() +                ", Alcohol Percentage: " + beer.getAlcoholPercentage() +                ", Price: " + beer.getPrice() +                ", Brewery: " + beer.getBrewery() +                ", Country of Origin: " + beer.getCountryOfOrigin() +                ", Description: " + beer.getDescription() +                ", Packaging: " + beer.getPackaging() +                ", Serving Temperature: " + beer.getServingTemperature() +                ", Food Pairing: " + beer.getFoodPairing();    }}

x8228資訊網——每日最新資訊28at.com

x8228資訊網——每日最新資訊28at.com

優點:x8228資訊網——每日最新資訊28at.com

  • 減少構造函數中的參數數量并提供可讀的方法調用。
  • 允許在完整狀態下實例化對象。
  • 簡化了不可變對象的構建過程。

缺點:x8228資訊網——每日最新資訊28at.com

  • 它會增加代碼行數,但提供了設計靈活性和改進的代碼可讀性。
  • 需要為每種產品類型創建單獨的ConcreteBuilder類。

5. 原型

原型是一種創建型設計模式,它允許您復制現有對象,而不依賴于它們的具體類。x8228資訊網——每日最新資訊28at.com

x8228資訊網——每日最新資訊28at.com

以下是Java代碼示例:x8228資訊網——每日最新資訊28at.com

designpatterns└── creational    └── prototype        ├── controller        │   └── TreeController.java        ├── model        │   ├── Tree.java        │   ├── PlasticTree.java        │   └── PineTree.java        └── PrototypeDemoApplication.java
//抽象類@Getter@Setterpublic abstract class Tree implements Cloneable {    private String type;    public abstract void copy();    @Override    protected Object clone() throws CloneNotSupportedException {        return super.clone();    }}//具體類-松樹public class PineTree extends Tree {    public PineTree() {        setType("Pine Tree");    }    @Override    public void copy() {        //實現    }}//具體類-塑料樹  public PlasticTree() {        setType("Plastic Tree");    }    @Override    public void copy() {        //實現    }
@RestController@RequestMapping("/api/trees")public class TreeController {    @GetMapping("/plastic")    public String createPlasticTree() {        Tree plasticTree = new PlasticTree();        return "Created: " + plasticTree.getType();    }    @GetMapping("/pine")    public String createPineTree() {        Tree pineTree = new PineTree();        return "Created: " + pineTree.getType();    }}

x8228資訊網——每日最新資訊28at.com

x8228資訊網——每日最新資訊28at.com

當需要創建的新對象與現有對象僅存在輕微差異時,原型模式非常有用。通過提前設置具有正確設置的實例,我們可以在需要更多相似對象時進行復制,從而節省了創建對象的時間和資源。x8228資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-11198-0.html詳解Java中的五種設計模式

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 十條建議,寫出簡潔專業的Java代碼

下一篇: 基于Python+Flask實現一個簡易網頁驗證碼登錄系統案例

標簽:
  • 熱門焦點
  • Find N3入網:最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經正式入網,型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • 消息稱迪士尼要拍真人版《魔發奇緣》:女主可能也找黑人演員

    8月5日消息,迪士尼確實有點忙,忙著將不少動畫改成真人版,繼《美人魚》后,真人版《白雪公主》、《魔發奇緣》也在路上了。據外媒消息稱,迪士尼將打造真人版
  • K6:面向開發人員的現代負載測試工具

    K6 是一個開源負載測試工具,可以輕松編寫、運行和分析性能測試。它建立在 Go 和 JavaScript 之上,它被設計為功能強大、可擴展且易于使用。k6 可用于測試各種應用程序,包括 Web
  • Python異步IO編程的進程/線程通信實現

    這篇文章再講3種方式,同時講4中進程間通信的方式一、 Python 中線程間通信的實現方式共享變量共享變量是多個線程可以共同訪問的變量。在Python中,可以使用threading模塊中的L
  • 零售大模型“干中學”,攀爬數字化珠峰

    文/侯煜編輯/cc來源/華爾街科技眼對于絕大多數登山愛好者而言,攀爬珠穆朗瑪峰可謂終極目標。攀登珠峰的商業路線有兩條,一是尼泊爾境內的南坡路線,一是中國境內的北坡路線。相
  • 梁柱接棒兩年,騰訊音樂闖出新路子

    文丨田靜 出品丨牛刀財經(niudaocaijing)7月5日,企鵝FM發布官方公告稱由于業務調整,將于9月6日正式停止運營,這意味著騰訊音樂長音頻業務走向消亡。騰訊在長音頻領域還在摸索。為
  • 三星推出Galaxy Tab S9系列平板電腦以及Galaxy Watch6系列智能手表

    2023年7月26日,三星電子正式發布了Galaxy Z Flip5與Galaxy Z Fold5。除此之外,Galaxy Tab S9系列平板電腦以及三星Galaxy Watch6系列智能手表也同期
  • iQOO 11S或7月上市:搭載“雞血版”驍龍8Gen2 史上最強5G Soc

    去年底,iQOO推出了“電競旗艦”iQOO 11系列,作為一款性能強機,iQOO 11不僅全球首發2K 144Hz E6全感屏,搭載了第二代驍龍8平臺及144Hz電競屏,同時在快充
  • 北京:科技教育體驗基地開始登記

      北京“科技館之城”科技教育體驗基地登記和認證工作日前啟動。首批北京科技教育體驗基地擬于2023年全國科普日期間掛牌,后續還將開展常態化登記?! ”本┛萍冀逃w驗基
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国内精品久久久久国产盗摄免费观看完整版| 欧美成人午夜激情视频| 亚洲图片你懂的| 亚洲一区二区在线视频| 欧美一级欧美一级在线播放| 久久国产精品久久w女人spa| 麻豆成人精品| 欧美日韩一区不卡| 国产精品午夜久久| 亚洲第一主播视频| 亚洲精品视频在线观看免费| 亚洲视频欧美在线| 久久高清福利视频| 欧美成人小视频| 欧美日韩在线综合| 国产一区二区三区网站| 亚洲片在线观看| 午夜精品久久久99热福利| 久久久久久久久蜜桃| 欧美日本韩国在线| 国外成人在线视频| 亚洲视屏在线播放| 久久综合图片| 国产精品久久婷婷六月丁香| 国产在线视频欧美| 一本久道综合久久精品| 久久久国产精品一区二区三区| 欧美精品激情在线| 国产一区二区久久精品| 亚洲精品一区二区三区婷婷月| 午夜精品av| 欧美激情视频一区二区三区免费 | 猛男gaygay欧美视频| 欧美视频第二页| 在线观看亚洲一区| 亚洲自拍偷拍福利| 欧美激情女人20p| 国产亚洲一二三区| 亚洲一区二区三区乱码aⅴ| 美国十次了思思久久精品导航| 国产精品老女人精品视频| 亚洲激情黄色| 久久婷婷成人综合色| 国产精品国产三级欧美二区| 亚洲国产精品一区二区第四页av | 亚洲人成艺术| 久久国内精品自在自线400部| 欧美日韩精品伦理作品在线免费观看| 国模私拍视频一区| 亚洲欧美日韩国产综合在线| 欧美激情亚洲自拍| 伊人久久综合| 欧美伊人精品成人久久综合97 | 国产亚洲观看| 亚洲一区亚洲二区| 欧美日韩日本视频| 亚洲人体影院| 美女视频网站黄色亚洲| 国内外成人免费视频| 亚洲欧美日韩国产精品| 欧美视频中文字幕| 99这里只有精品| 欧美承认网站| 亚洲国产91| 美女任你摸久久| 好男人免费精品视频| 欧美一区二区三区免费大片| 国产精品高潮呻吟视频| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 国产精品亚洲а∨天堂免在线| 日韩视频在线免费观看| 免费不卡在线观看av| 黑人巨大精品欧美一区二区| 欧美一区二区视频免费观看 | 亚洲成色777777在线观看影院| 久久精品中文字幕一区二区三区| 国产精品日韩精品欧美在线| 亚洲一级片在线看| 国产精品毛片在线看| 亚洲视频精选在线| 国产精品日韩高清| 午夜视频一区| 国产午夜精品理论片a级大结局 | 欧美日本久久| 亚洲精品乱码久久久久久按摩观 | 国产麻豆91精品| 亚洲欧美中文日韩在线| 国产伦精品一区二区三区高清版| 午夜精品福利在线| 国产亚洲精品综合一区91| 久久福利资源站| 精品二区久久| 欧美成人精品在线视频| 亚洲区一区二| 欧美日韩精选| 亚洲性线免费观看视频成熟| 国产精品毛片a∨一区二区三区| 宅男精品视频| 国产麻豆日韩| 久久影音先锋| 日韩视频免费看| 国产精品国产三级国产aⅴ9色 | 久久天堂av综合合色| 尤妮丝一区二区裸体视频| 免费亚洲电影在线观看| 亚洲裸体视频| 国产精品www| 欧美在线你懂的| 伊人激情综合| 欧美精品一区在线播放| 亚洲一二三区在线观看| 国产婷婷色一区二区三区四区| 久久久午夜精品| 亚洲人成人77777线观看| 欧美日韩一区二区免费在线观看| 亚洲欧美久久久| 红桃av永久久久| 欧美精品少妇一区二区三区| 亚洲一区二区三区精品在线| 国产亚洲精久久久久久| 蜜臀久久久99精品久久久久久| 99热精品在线观看| 国产日韩精品在线| 欧美成人tv| 亚洲综合国产激情另类一区| 黄色欧美成人| 欧美色道久久88综合亚洲精品| 欧美一区二区三区免费视| 在线看不卡av| 国产精品成人观看视频免费 | 美日韩精品视频| 亚洲性感激情| 在线不卡免费欧美| 欧美午夜一区二区三区免费大片| 久久精品国产91精品亚洲| 亚洲精品国产精品久久清纯直播| 国产精品成av人在线视午夜片| 久久在线免费| 亚洲欧美日本国产专区一区| 亚洲福利视频在线| 国产精品久久波多野结衣| 狂野欧美性猛交xxxx巴西| 亚洲天天影视| 一区福利视频| 国产精品免费aⅴ片在线观看| 久久久久久日产精品| 亚洲婷婷综合久久一本伊一区| 激情综合网址| 国产精品久久一卡二卡| 免费看成人av| 欧美在线视频免费| 在线亚洲成人| 亚洲国产精品久久久久久女王| 国产精品入口日韩视频大尺度 | 黄色在线成人| 国产精品久久久久久妇女6080| 麻豆国产va免费精品高清在线| 亚洲欧美清纯在线制服| 日韩午夜激情av| 在线精品福利| 国内自拍一区| 日韩网站在线看片你懂的| 美日韩精品免费观看视频| 国产精品日韩久久久| 亚洲第一区在线观看| 久久免费国产精品| 国产一区二区按摩在线观看| 夜夜狂射影院欧美极品| 男女激情久久| 国产一区成人| 欧美日韩精品久久| 欧美一区二区精品在线| 国产精品欧美一区二区三区奶水| 久久av一区二区| 亚洲黄色av| 精品成人久久| 国产欧美日韩一区二区三区| 欧美日韩免费高清一区色橹橹| 久久精品视频一| 欧美一区二区免费视频| 亚洲一区二区三区视频| 一区二区三区www| 亚洲第一页中文字幕| 欧美黄色免费网站| 亚洲综合99| 欧美小视频在线观看| 在线一区欧美| 欧美日韩另类字幕中文| 香蕉国产精品偷在线观看不卡| 国产精品你懂的在线| 久久久久久久网| 亚洲美女尤物影院| 国产精品久久久久影院色老大| 蜜桃久久精品乱码一区二区| 亚洲免费观看在线观看| 欧美日韩在线播| 美女视频网站黄色亚洲| 午夜亚洲视频| 亚洲激情影院| 国产精品嫩草99a| 久久亚洲春色中文字幕| 久久成人免费视频| 欧美专区第一页| 亚洲福利免费|