精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

宅男在线观看免费高清网站| 日批视频免费观看| 欧美一性一交| 欧美中文字幕不卡| 国产高清精品软男同| 国模无码一区二区三区| 日韩电影免费在线观看网站| www亚洲欧美| 亚洲熟女乱综合一区二区三区 | 性色av一区二区咪爱| 免费看黄色的视频| 国产一区二区视频在线看| 亚洲国产毛片aaaaa无费看| 日本一区二区三区四区在线观看| 国产又大又粗又长| 亚洲永久在线| 久精品免费视频| 国产一区二区三区精品在线| 91精品入口| 欧美日韩在线一区二区| 国产色一区二区三区| 日本在线观看网站| 93久久精品日日躁夜夜躁欧美| 国产精品一区二区三区成人| 久久久久久久极品| 欧美激情日韩| 中文字幕成人在线| 美女搡bbb又爽又猛又黄www| 日韩精品一级毛片在线播放| 狠狠躁18三区二区一区| 日本一二三区视频在线| 国产高清视频在线| 91蜜桃在线观看| αv一区二区三区| 在线观看国产精品入口男同| 亚洲一区欧美二区| 欧美精品成人在线| 69xx绿帽三人行| 成人中文在线| 亚洲一区二区久久| 草草影院第一页| 开心激情综合| 精品国产免费久久| 中文字幕欧美视频| 99tv成人影院| 欧美三电影在线| 国产在线青青草| 捆绑调教日本一区二区三区| 亚洲免费在线视频一区 二区| 婷婷久久伊人| a天堂中文在线| 亚洲国产精品成人久久综合一区 | 美女扒开腿免费视频| 欧洲一区在线| 日韩亚洲欧美在线| 人妻激情偷乱视频一区二区三区| 999精品视频在线观看| 正在播放亚洲一区| 激情成人在线观看| 久久三级中文| 欧美mv和日韩mv国产网站| 成人三级做爰av| 超碰97久久| 亚洲黄色www| 无码人妻aⅴ一区二区三区| 久久97久久97精品免视看秋霞| 亚洲精品一区二区三区精华液| 欧美久久久久久久久久久| 丁香综合av| 日韩精品免费一线在线观看| 国产全是老熟女太爽了| 免费成人网www| 国产一区二区三区在线免费观看| 日韩中文字幕有码| 99久久久国产精品美女| 美女扒开尿口让男人操亚洲视频网站| 日本黄色免费片| 欧美三区在线| 久久久久久香蕉网| 久草视频一区二区| 久久精品久久精品| 亚洲综合在线中文字幕| 欧美 日韩 人妻 高清 中文| 久久婷婷色综合| 亚洲一区尤物| 久草免费在线色站| 色狠狠一区二区| 中文字幕国产免费| jizz久久精品永久免费| 亚洲人成在线一二| 欧美 日韩 国产 一区二区三区 | 97精品视频在线| 亚洲大尺度在线观看| 九九久久精品视频| 国产精品日韩欧美一区二区| 国产黄在线看| 亚洲一区二区在线播放相泽| 免费观看成人网| 日韩精品一区二区三区免费视频| 日韩国产一区三区| 九九精品视频免费| 在线一区视频| 91免费人成网站在线观看18| 午夜视频免费看| 亚洲三级理论片| 国产精品欧美激情在线观看| 精品成人18| 国产一级揄自揄精品视频| 午夜少妇久久久久久久久| 亚洲欧美日韩国产一区| 91免费电影网站| 国产在线中文字幕| 亚洲国产aⅴ天堂久久| 中文字幕第100页| 欧亚精品一区| 欧美第一黄网免费网站| 一区二区三区精彩视频| 久久久综合激的五月天| 黑人巨茎大战欧美白妇| 99热播精品免费| 日韩精品亚洲精品| 免费在线观看av网址| 免费精品99久久国产综合精品| 好看的日韩精品| 在线三级中文| 777欧美精品| 人妻aⅴ无码一区二区三区| 伊人天天综合| 99视频在线播放| 日本视频在线观看| 欧美综合色免费| 亚洲国产av一区| 亚洲在线电影| 精品国产一区二区三区四区vr| 综合久久2o19| 欧美一区二区三区小说| 女教师淫辱の教室蜜臀av软件| 久久国产88| 精品一区二区三区国产| heyzo在线欧美播放| 日韩一区二区精品葵司在线| 51精品免费网站| 精品中文字幕一区二区| 亚洲国产欧美一区二区三区不卡| 深夜成人福利| 亚洲视频日韩精品| 中文字幕在线看人| 久久先锋影音av鲁色资源| 欧美成人免费在线观看视频| 99re热精品视频| 久久男人资源视频| 日本成人动漫在线观看| 亚洲电影在线免费观看| 蜜臀aⅴ国产精品久久久国产老师| 欧美一区亚洲| 成人羞羞视频免费| а√天堂资源官网在线资源| 亚洲精品99999| 久久免费激情视频| 久久蜜桃香蕉精品一区二区三区| 国产免费成人在线| 国产欧美日韩视频在线| 国产精品成人免费视频| 日本最新在线视频| 91精品久久久久久久91蜜桃| 久草免费在线视频观看| 成人国产电影网| 国产极品美女高潮无套久久久| 狠狠做六月爱婷婷综合aⅴ | 日韩精品久久久久久久软件91| 久久91亚洲精品中文字幕奶水 | 久久精品国产精品亚洲毛片| 久久久精品国产| 精品人妻午夜一区二区三区四区| 亚洲国产精品影院| 亚洲第一黄色网址| 日本免费新一区视频| 超碰成人在线免费观看| 最新国产精品精品视频| 2019中文字幕在线免费观看| 啊v视频在线| 日韩亚洲欧美在线| 国产超碰人人爽人人做人人爱| 国产网站一区二区| 欧美xxxxxbbbbb| 亚洲精选91| 亚洲欧洲精品在线观看| jazzjazz国产精品麻豆| 日韩av男人的天堂| 国产精品扒开做爽爽爽的视频| 精品动漫一区二区三区在线观看| 99精品人妻国产毛片| 亚洲三级在线免费| 亚洲精品乱码久久久久久不卡| 蜜桃视频一区二区三区在线观看| 996这里只有精品| 欧美**vk| 国产福利久久| se69色成人网wwwsex| 久久久久久久久综合| wwwww在线观看免费视频| 日韩欧美在线影院| 奴色虐av一区二区三区| 亚洲午夜久久久| 久操视频在线观看免费| 成人黄色国产精品网站大全在线免费观看 | 91网在线播放| 亚洲精品suv精品一区二区| 成人午夜精品视频| 偷拍与自拍一区| 爱爱视频免费在线观看| 国产婷婷色一区二区三区四区| 亚洲av综合色区无码另类小说| 欧美精品久久久久久久免费观看| 久久久久人妻一区精品色| 高潮精品一区videoshd| www亚洲成人| 国产亚洲高清视频| 九九久久九九久久| 欧美在线色图| 激情视频一区二区| 视频亚洲一区二区| 成人激情视频网| 成人免费看视频网站| 久久全球大尺度高清视频| 日本三级视频在线观看| 亚洲无限av看| 青青色在线视频| 精品久久久久久亚洲综合网| 国产又大又黄又爽| 欧美日韩综合在线| 国产天堂第一区| 色先锋aa成人| aaaaaa毛片| 欧美午夜精品久久久久久人妖| 国产真人真事毛片| 洋洋成人永久网站入口| 在线观看亚洲网站| 亚洲欧洲日产国码二区| 亚洲高潮女人毛茸茸| 国产亚洲综合色| 免费看黄色的视频| 日本一区二区三区四区在线视频| 一色道久久88加勒比一| 久久伊人蜜桃av一区二区| 尤物网站在线观看| 99精品一区二区| 久久久久国产精品区片区无码| av电影天堂一区二区在线观看| 国产高潮失禁喷水爽到抽搐| 懂色av中文字幕一区二区三区| 亚欧美一区二区三区| 国产一区二区精品在线观看| 免费人成视频在线播放| 国产激情视频一区二区三区欧美 | 久久久国产精品人人片| 亚洲一区二区影院| 日韩精品乱码久久久久久| 精品动漫一区二区| 中文字幕亚洲乱码熟女1区2区| 欧美日韩亚洲高清| 中文字幕精品视频在线观看| 欧美三片在线视频观看| 国产精品久久无码一三区| 欧美一级高清片在线观看| 后入内射欧美99二区视频| 日韩精品亚洲元码| 国产粉嫩一区二区三区在线观看 | 福利写真视频网站在线| 久久久久久噜噜噜久久久精品| 日韩伦理精品| 国产精品狼人色视频一区| 一区二区三区日本视频| 超碰97人人人人人蜜桃| 秋霞蜜臀av久久电影网免费| 日本午夜精品电影| 久久久久久久久国产一区| 日韩激情视频一区二区| 久久国产直播| av噜噜在线观看| 99久久伊人网影院| 欧美a在线播放| 亚洲一区二区在线观看视频| 中文字幕黄色片| 91精品国产aⅴ一区二区| 色呦呦中文字幕| 最好看的2019的中文字幕视频| 欧美黑人猛交| 国产精品av网站| 亚洲1区在线观看| 人禽交欧美网站免费| 欧美成人亚洲| 熟妇人妻va精品中文字幕| 麻豆国产精品一区二区三区 | 欧美欧美黄在线二区| 一区二区在线观看网站| 99精品热视频只有精品10| 欧美成人三级在线播放| 91丝袜国产在线播放| 少妇高潮一区二区三区喷水| 性久久久久久久久| 一级黄色片在线看| 国产丝袜一区二区三区| 伊人福利在线| 国产精品色视频| 欧美1区二区| 青青草综合在线| 麻豆久久一区二区| 国内精品久久99人妻无码| 亚洲男人的天堂av| 亚洲中文字幕在线一区| 亚洲摸下面视频| 国内小视频在线看| 成人av在线亚洲| 国产免费av一区二区三区| 日韩av在线播放不卡| 精品无人区卡一卡二卡三乱码免费卡| 国产ts丝袜人妖系列视频| 亚洲午夜三级在线| 国产免费不卡视频| 在线观看欧美日韩国产| 中文在线а√天堂| 国产女主播一区二区| 欧美一区久久| 两性午夜免费视频| 国产精品乱人伦| 瑟瑟视频在线免费观看| 精品视频在线播放色网色视频| av福利在线导航| 国产精品久久国产精品| 欧美国产精品| 久久精品一二三四| 亚洲视频免费观看| 91午夜交换视频| xvideos亚洲人网站| 成人在线不卡| 亚洲日本精品| 久久超级碰视频| 国产小视频你懂的| 欧美日韩一卡二卡三卡| 超碰国产在线| 国产精品夜间视频香蕉| 日韩欧美大片| 中文字幕亚洲乱码| 中文字幕在线播放不卡一区| 亚洲熟女乱色一区二区三区久久久 | 国产九九九视频| 亚洲免费看黄网站| 国产区精品在线| 欧美人与性动交| 99精品在免费线中文字幕网站一区| 肉大捧一出免费观看网站在线播放 | 精品人妻无码一区二区三区 | 欧美女人性生活视频| 91年精品国产| 黄色av网站免费| 中文字幕久精品免费视频| 欧美视频第一| 四虎精品欧美一区二区免费| 国产福利一区二区三区在线视频| 男女免费视频网站| 日韩hd视频在线观看| 亚洲最大成人| 亚洲一一在线| 粉嫩绯色av一区二区在线观看| 日韩精品视频免费播放| 亚洲欧美另类在线观看| 欧美成人福利| 黄色一级大片免费| 91一区二区在线| 国产在线一级片| 久久av中文字幕| 欧美一区自拍| 欧美特黄aaa| 亚洲成人一二三| 国产精品一级伦理| 成人精品在线观看| 亚洲黄色成人| 日本精品久久久久中文| 日韩无一区二区| 波多野结衣亚洲| 热这里只有精品| 99riav久久精品riav| 中文字幕1区2区3区| 欧美裸体男粗大视频在线观看| 欧美三级电影在线| 日本三级黄色网址| 亚洲一级片在线观看| 搞黄视频免费在线观看| 成人91免费视频| 秋霞国产午夜精品免费视频| 日韩女优一区二区| 亚洲欧美中文日韩在线v日本| a一区二区三区亚洲| 亚洲 高清 成人 动漫| 成人欧美一区二区三区| 天堂资源中文在线| 亚洲伊人久久大香线蕉av| 久久高清免费观看| 国产亚洲欧美精品久久久久久 |