精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

詳解Java中的五種設計模式

開發
創建型設計模式提供了各種對象創建機制,從而增加了現有代碼的靈活性和重用性。其主要功能是以最佳方式提供非常具體的解決方案。它們可以進一步分為以下類別。

設計模式是一種可重用的解決方案,用于解決軟件設計中常見的問題。不同類型的設計模式針對解決不同的特定問題或問題組合。

如下圖所示,一些常見的設計模式類型包括處理對象創建的創建型模式;處理對象組合和組織的結構型模式;以及處理對象和類之間通信的行為型模式。

本文分享幾種與Java中常用的創建型設計模式相關的代碼示例。

創建型設計模式

創建型設計模式提供了各種對象創建機制,從而增加了現有代碼的靈活性和重用性。

其主要功能是以最佳方式提供非常具體的解決方案。它們可以進一步分為以下類別。

1. 單例

單例是一種創建型設計模式,它確保一個類只有一個實例,并提供對該實例的全局訪問點。

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

public class SingletonClass {

    private static SingletonClass instance;

    private SingletonClass() {
        // 私有構造函數,防止外部實例化
    }

    public static SingletonClass getInstance() {
        if (instance == null) {
            instance = new SingletonClass();
        }
        return instance;
    }
}

如下所示,當我們發送Postman請求時,控制器類和結果將是同一個實例:

@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();
    }

}

當您想要確保類僅存在一個實例時(例如,由程序的不同部分共享的單個數據庫對象),您應該使用單例設計模式。

2. 工廠

工廠方法是一種創建型設計模式,它提供了一種在創建過程中無需指定其具體類即可創建產品對象的解決方案。

以下是Java代碼示例,PaymentProcessor是定義處理付款的合同的接口。

public interface PaymentProcessor {

    void processPayment();
}

CreditCardPaymentProcessor和PaypalPaymentProcessor是實現PaymentProcessor接口的具體類。這些類為CreditCard和PayPal付款特定的processPayment()方法提供了實現。

@Service
public class CreditCardPaymentProcessor implements PaymentProcessor {

    @Override
    public void processPayment() {
        // 信用卡支付交易
    }
}

@Service
public class PaypalPaymentProcessor implements PaymentProcessor {

    @Override
    public void processPayment() {
        //  PayPal支付交易
    }
}

PaymentProcessorFactory是實現工廠設計模式的工廠類。該類負責根據給定的付款方式創建不同PaymentProcessor實現的實例。

@Component
public 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創建適當的付款處理器。這簡化了代碼并使添加新付款處理器變得容易。

工廠方法是一種用于節省系統資源的設計模式,它通過重復使用現有對象而不是重復構建它們來實現這一目的。

3. 抽象工廠

抽象工廠是一種創建型設計模式,它允許您生成相關對象系列,無需指定其具體類。

以下是Java代碼示例:

//工廠類
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 創建產品 A
ProductFactory productAFactory = new ProductAFactory();
Product productA = productAFactory.createProduct();
System.out.println("Product A: " + productA.getName());

// 使用 ProductBFactory 創建產品 B
ProductFactory productBFactory = new ProductBFactory();
Product productB = productBFactory.createProduct();
System.out.println("Product B: " + productB.getName());

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

4. Builder

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

以下是Java代碼示例::

@Builder
@Getter
@Setter
public 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();
    }

}

優點:

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

缺點:

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

5. 原型

原型是一種創建型設計模式,它允許您復制現有對象,而不依賴于它們的具體類。

以下是Java代碼示例:

designpatterns
└── creational
    └── prototype
        ├── controller
        │   └── TreeController.java
        ├── model
        │   ├── Tree.java
        │   ├── PlasticTree.java
        │   └── PineTree.java
        └── PrototypeDemoApplication.java
//抽象類
@Getter
@Setter
public 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();
    }
}

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

責任編輯:趙寧寧 來源: Java學研大本營
相關推薦

2025-08-01 07:55:56

2024-01-15 00:11:04

Docker網絡系統

2009-01-04 13:49:17

Java設計模式設計模式工廠模式

2024-01-09 09:06:13

2023-11-29 18:06:15

Python設計模式

2023-07-03 07:39:43

Spring框架設計模式

2010-01-21 09:08:53

.NET設計模式

2009-06-29 18:11:40

JSP設計模式

2016-09-22 20:07:07

JavaScriptNode設計模式

2009-06-15 14:15:07

Java設計模式Java

2021-02-19 14:07:03

JavaScript編程開發

2025-09-26 02:55:00

2025-02-12 08:04:54

代碼Ordersetter

2022-06-16 11:01:22

數據庫SQL

2012-05-28 09:16:12

Java設計模式

2012-05-10 09:42:21

web響應設計

2022-10-13 14:14:42

開發微服務測試

2021-06-29 08:54:23

設計模式代理模式遠程代理

2021-11-02 07:54:40

List分片Java

2020-10-14 13:58:14

23種設計模式速記
點贊
收藏

51CTO技術棧公眾號

成人高清在线视频| 国色天香一区二区| 欧美一级黄色片| 成年在线观看视频| 午夜在线观看视频18| 视频精品一区二区| 九九热在线精品视频| 国产色视频一区二区三区qq号| 一区二区三区无毛| 精品女同一区二区三区在线播放| 亚洲不卡1区| 99国产在线播放| 麻豆九一精品爱看视频在线观看免费| 日韩视频免费中文字幕| 野战少妇38p| 久久精品超碰| 黄色成人av网| 青青视频免费在线| h视频在线免费| 成人av在线电影| 国产色婷婷国产综合在线理论片a| 精品无码m3u8在线观看| 色综合咪咪久久网| 国产视频久久久久久久| 佐佐木明希电影| 国产成人免费视频网站视频社区 | 成人国产精品免费观看动漫| 91精品国产综合久久香蕉最新版| 波多野结衣视频网站| 亚洲国产老妈| 日韩中文字幕国产| 男人舔女人下部高潮全视频 | 亚洲国产天堂久久综合网| 亚洲精品第三页| 91福利精品在线观看| 色诱视频网站一区| 久色视频在线播放| jizz一区二区三区| 亚洲一二三专区| 黄色a级片免费看| av片在线观看网站| 国产精品福利一区二区三区| 欧美日韩一区综合| 丝袜+亚洲+另类+欧美+变态| 国产成人免费xxxxxxxx| 51蜜桃传媒精品一区二区| 亚洲中文字幕一区二区| 日韩av一级电影| 国产精品第一页在线| 亚洲男人天堂网址| 视频一区视频二区中文字幕| 国产精品扒开腿做爽爽爽视频 | 日韩激情一二三区| 国产精品扒开腿爽爽爽视频| 波多野结衣视频网址| 日韩中文字幕1| 国产精品∨欧美精品v日韩精品| 亚洲婷婷综合网| 久色成人在线| 国产精品私拍pans大尺度在线| 这里只有精品999| 免费人成网站在线观看欧美高清| 国产精品免费视频xxxx| 一级特黄录像免费看| 久久99精品一区二区三区| 成人信息集中地欧美| 99在线无码精品入口| 国产精品白丝jk黑袜喷水| 91文字幕巨乱亚洲香蕉| 天天干天天干天天干| 91欧美激情一区二区三区成人| 看高清中日韩色视频| 高清在线观看av| 亚洲欧美日韩在线不卡| 久久福利一区二区| 在线能看的av网址| 欧美日韩精品一区二区三区蜜桃 | 亚洲一区二区av| 日韩三级电影网址| 波多野结衣影院| 狠狠综合久久av一区二区蜜桃| 日韩中文字幕国产| 亚洲国产精品成人无久久精品| 麻豆精品91| 亚洲最大福利网站| 欧美一区二区少妇| 亚洲美腿欧美偷拍| 漂亮人妻被中出中文字幕| 日韩精品第二页| 精品福利av导航| 丁香激情五月少妇| 欧美日韩中文| 国产精品精品视频| 国产高清免费av| 国产亚洲精品7777| 嫩草影院中文字幕| 国产精品久久亚洲不卡| 欧美tickling挠脚心丨vk| 亚洲精品乱码久久久久久久久久久久| 久久久国产精品| 欧美在线观看日本一区| 国产精品一二三四五区| 久久综合成人精品亚洲另类欧美| 992tv成人免费观看| 在线观看欧美日韩电影| 日韩免费看网站| 美国黄色特级片| 亚洲人www| 91在线高清视频| xxxxx日韩| 天天影视涩香欲综合网| 青青草原播放器| 教室别恋欧美无删减版| 韩国精品美女www爽爽爽视频| 亚洲天堂自拍偷拍| 久久久久99精品一区| www插插插无码免费视频网站| 成人深夜福利| 亚洲欧洲激情在线| 五月天婷婷丁香| 国产麻豆视频一区二区| 亚洲精品久久久久久一区二区| 美女av在线免费看| 欧美成人在线直播| 欧美h片在线观看| 日本强好片久久久久久aaa| 久久精品第九区免费观看 | 91po在线观看91精品国产性色| 91禁在线观看| 久久夜色精品一区| 国产精品50p| 丁香婷婷成人| 欧美激情视频在线| 亚洲国产精品久久人人爱潘金莲| 中文字幕在线不卡一区二区三区| 免费一级特黄录像| 欧美综合另类| 国产精品久久久久久中文字| 精品电影在线| 91福利国产成人精品照片| 久久久亚洲av波多野结衣| 99国产精品久久久久久久| 动漫精品视频| heyzo在线| 亚洲第一精品夜夜躁人人躁| 久久免费精彩视频| 成人福利视频网站| 精品久久久久久久久久中文字幕| 国产精品毛片av| 97国产精品免费视频| 日本国产在线观看| 精品国产1区2区| 加勒比一区二区| 日韩电影在线免费看| 日韩av一区二区三区美女毛片| 欧美三区四区| 精品国内自产拍在线观看| 999av视频| 亚洲一区中文日韩| 亚洲精品女人久久久| 香蕉国产精品偷在线观看不卡| 欧美久久久久久一卡四| 成人做爰免费视频免费看| 色哟哟入口国产精品| 国产免费福利视频| 亚洲综合一二三区| 欧美精品黑人猛交高潮| 日韩激情一二三区| 中国 免费 av| 欧美18免费视频| 国产精品久久久久久久久久东京| 999国产在线视频| 91精选在线观看| 日韩xxx高潮hd| 国产欧美日韩三区| 亚洲精品中文字幕乱码无线| 激情婷婷久久| 日韩精品久久久免费观看 | 日韩午夜av一区| 日韩欧美成人一区二区三区| 国产精品乱码人人做人人爱| wwwxxx色| 日本成人超碰在线观看| 91大学生片黄在线观看| 亚洲人成精品久久久| 国产日本欧美一区二区三区| 超级碰碰不卡在线视频| 国产一区二区三区免费视频| 日韩精品一卡二卡| av中文字幕免费在线观看| 波多野结衣视频观看| 亚洲AV无码一区二区三区性| 99久久99久久久精品棕色圆| 区一区二在线观看| 国产又粗又猛又黄又爽| 成人看的视频| 91午夜理伦私人影院| 91超碰免费在线| 一本色道久久88精品综合| 国产高清视频免费观看| 欧美丝袜美女中出在线| 久久精品国产精品国产精品污| 日本在线视频网| 亚洲精品www| 国产老妇伦国产熟女老妇视频| 五月婷婷欧美视频| 日本高清一二三区| 国产亚洲一区二区三区在线观看 | 麻豆视频在线观看免费网站黄| 一区二区三欧美| 亚洲人午夜射精精品日韩| 91精品婷婷国产综合久久性色| 黄色片视频免费| 香蕉加勒比综合久久| 久久国产高清视频| 国产视频一区在线播放| 午夜视频在线观看国产| 国产老妇另类xxxxx| 999在线观看| 日韩黄色免费网站| 黑鬼大战白妞高潮喷白浆| 亚洲激情影院| 日韩免费在线观看av| 91精品精品| 一区二区三区四区欧美日韩| 国产亚洲一区二区三区啪 | 成人精品视频| 免费精品视频一区| 欧美a大片欧美片| 国产精品三区在线| 亚洲视频国产精品| 亚洲一区二区中文| 精品国产亚洲一区二区在线观看| 国产精品视频区| 88xx成人免费观看视频库 | 91成人国产综合久久精品| 欧美在线观看一区二区| 国产一卡二卡三卡| 欧洲一区在线观看| 成人毛片一区二区三区| 日韩欧美中文字幕在线播放| 91精品国产综合久久久蜜臀九色 | 一区不卡在线观看| 欧美乱妇23p| 一级特黄aaaaaa大片| 9191久久久久久久久久久| 一级黄色片网站| 在线播放中文一区| 国产一区二区波多野结衣 | 亚洲欧美一区二区三区不卡| 国模娜娜一区二区三区| 欧美视频国产视频| 国产美女av一区二区三区| 亚欧精品在线视频| 国产二区国产一区在线观看| www.美色吧.com| 波多野结衣在线一区| 免费看污片网站| 中文字幕欧美区| 三级在线观看免费大全| 亚洲综合av网| 天堂中文字幕在线观看| 欧美亚洲国产怡红院影院| 亚洲自拍偷拍另类| 日韩一区二区三区视频在线观看 | 99精品视频在线免费播放| 91青草视频久久| 成人动态视频| 欧美日韩一区二| 99精品视频在线观看免费播放 | 午夜在线一区| 中文字幕有码av| 国产成人在线电影| 色呦呦一区二区| 国产精品久久久久9999吃药| 玖玖爱免费视频| 色综合色狠狠天天综合色| 一级全黄少妇性色生活片| 精品人在线二区三区| 国模吧精品人体gogo| 免费91在线视频| 天堂电影一区| 91九色蝌蚪国产| 亚洲+小说+欧美+激情+另类 | 免费在线观看你懂的| 国产精品三级在线观看| 久久久夜色精品| 91传媒视频在线播放| 国内老熟妇对白xxxxhd| 国产视频自拍一区| 日韩欧美猛交xxxxx无码| 色婷婷粉嫩av| 三级欧美日韩| 91精品久久久久久久久久久久久| 亚洲福利合集| 天天综合色天天综合色hd| 午夜精品av| 99热这里只有精品在线播放| 成人手机在线视频| 网爆门在线观看| 欧美色视频日本版| 国产色在线视频| 亚洲最新中文字幕| 交100部在线观看| 91网在线免费观看| 精品国产aⅴ| 欧美日韩精品在线一区二区| 国产麻豆精品theporn| 美女爆乳18禁www久久久久久| 亚洲特级片在线| 国产乱码在线观看| 日韩毛片在线观看| 日本动漫理论片在线观看网站 | 成人免费的视频| 影音先锋男人资源在线观看| 欧美午夜久久久| 人妻精品一区一区三区蜜桃91| 久久精品国产精品亚洲| 欧洲精品一区二区三区| 久久伊人资源站| 亚洲精品在线二区| 中文字幕在线观看91| 中文字幕日韩一区| 中文字幕一区二区三区四区视频 | 久久久久久久久久网站| 欧美挠脚心视频网站| 国产一区二区三区不卡在线| 欧美一级电影免费在线观看| 丁香一区二区| 久久av综合网| www.亚洲人| 四虎永久在线精品| 精品国产a毛片| 久久99亚洲网美利坚合众国| 91色在线观看| 91精品国产91久久久久久密臀| 欧美成人三级在线播放| 亚洲国产成人私人影院tom | 欧美一级久久久| 亚洲第一图区| 成人av免费电影| 亚洲国产精品第一区二区| 一区二区三区四区影院| 亚洲国产精品麻豆| 天堂成人在线观看| 亚洲91av视频| 深爱激情综合| 91制片厂毛片| 成人欧美一区二区三区白人| 91久久久久久久久久久久| 久久久www成人免费精品张筱雨 | 久久精彩视频| 天堂久久一区二区三区| 日本美女xxx| 欧美老女人第四色| a黄色片在线观看| wwwxx欧美| 国产精品久久久久毛片大屁完整版| 青青草视频播放| 在线观看国产91| 久久77777| 国产欧美日韩综合精品二区| 亚洲精品免费观看| 久久美女免费视频| 欧美日韩成人一区| 羞羞视频在线免费国产| 国产综合欧美在线看| 老鸭窝91久久精品色噜噜导演| 手机看片福利视频| 在线播放/欧美激情| 91jq激情在线观看| 日韩欧美亚洲在线| 国产乱码精品一区二区三区av| 日本中文字幕网| 国产亚洲精品va在线观看| 电影中文字幕一区二区| 国产v片免费观看| 久久精品欧美一区二区三区麻豆| 91亚洲国产成人久久精品麻豆| 久久99热精品| 国产成人精品一区二区免费看京| 天天av天天操| 欧美日韩免费网站| 麻豆av在线免费看| 精品不卡一区二区三区| 免费视频一区二区| 日本在线视频免费| 中文字幕精品—区二区| 粉嫩的18在线观看极品精品| 国产一级片黄色| 一区二区三区四区不卡在线| 国模精品一区二区| 99www免费人成精品| 久久永久免费| 国产一二三四在线| 中文字幕亚洲欧美日韩在线不卡| 福利欧美精品在线| 在线一区二区不卡| 色综合夜色一区| 国产美女一区视频|