国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

詳解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-07-03 07:39:43

Spring框架設計模式

2010-01-21 09:08:53

.NET設計模式

2023-11-29 18:06:15

Python設計模式

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

2012-05-28 09:16:12

Java設計模式

2025-02-12 08:04:54

代碼Ordersetter

2012-05-10 09:42:21

web響應設計

2022-10-13 14:14:42

開發微服務測試

2022-06-16 11:01:22

數據庫SQL

2021-06-29 08:54:23

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

2020-10-14 13:58:14

23種設計模式速記

2015-09-14 09:31:44

結對設計
點贊
收藏

51CTO技術棧公眾號

欧美激情 国产精品| 久久99精品久久| 美女网站在线免费欧美精品| 欧洲成人免费aa| 麻豆精品一区| 一本色道久久综合狠狠躁篇的优点 | 成人免费毛片片v| 色女人综合av| 在线亚洲激情| 久久久久久精| 亚洲视屏一区| 国产麻豆乱码精品一区二区三区| 欧美二区不卡| 成人观看高清在线观看免费| 精品香蕉视频| 国产在线拍偷自揄拍精品| 精品一区二区三区在线| 国产成人一区三区| 欧美a级片视频| 99久久精品免费看国产一区二区三区| 一本精品一区二区三区| 91福利视频导航| 在线视频观看日韩| 欧美动漫一区二区| 久久国内精品视频| av之家在线观看| 国产精品久久99| 一级特黄特色的免费大片| 午夜免费久久看| av小片在线| 日韩风俗一区 二区| 嫩草伊人久久精品少妇av杨幂| 精品国产一区二区在线| 视频在线一区| 国产欧美日韩高清| 久久不射中文字幕| 男人插女人视频在线观看| 国产精品色婷婷久久58| 中文字幕在线二区| 欧美videos中文字幕| 欧美黄页在线免费观看| 欧美性在线观看| 一区二区亚洲| 六月婷婷激情综合| 亚洲视频综合在线| 超碰免费97在线观看| 亚洲欧美国产精品专区久久| 中文字幕区一区二区三| 成人亲热视频网站| 免费观看在线综合| 美女网站色免费| 色狠狠一区二区三区香蕉| 亚洲精品白浆| 欧美精品videossex88| 欧美三级视频| 蜜桃传媒一区二区三区| 亚洲自拍另类综合| 蜜臀av国内免费精品久久久夜夜| 日韩一区二区三区国产| 日韩亚洲一区在线| 亚洲乱码一区二区三区| 中文成人综合网| 免费在线看黄网站| 久久久精品国产网站| 亚洲欧美一级二级三级| 男女私大尺度视频| 精品久久久久久亚洲精品| 亚洲小少妇裸体bbw| 欧美重口另类videos人妖| 久久久久久一区二区| 色噜噜狠狠一区二区| 国外成人福利视频| 亚洲熟妇av日韩熟妇在线| 一本久道久久综合中文字幕| 欧美激情中文网| 中文日韩欧美| 精品999在线| 欧美一二三四区在线| 国产精品白丝av嫩草影院| 蜜桃精品久久久久久久免费影院 | 国产精品青草久久| 免费看美女视频在线网站| 草民午夜欧美限制a级福利片| 国产一区久久| 手机在线免费观看毛片| 欧美一区2区视频在线观看| 日韩aaa久久蜜桃av| 欧美性视频在线播放| 狠狠久久亚洲欧美专区| 国产亚洲久久| 亚洲精品成人自拍| 午夜电影网亚洲视频| 福利精品在线| 亚洲视频一区在线| 丝袜诱惑亚洲看片| 四虎国产精品成人免费4hu| 99精品欧美一区| 日韩欧美亚洲范冰冰与中字| 69久久久久久| 日韩免费高清视频| 日韩欧美高清| 男人天堂成人在线| 国产亚洲精品久久| 日本不卡一区二区| 黄色小视频在线免费观看| 韩国国内大量揄拍精品视频| 国内精品久久久久影院一蜜桃| av在线电影网| 69精品小视频| 99精品视频一区| 樱花草涩涩www在线播放| 美脚丝袜一区二区三区在线观看| 无吗不卡中文字幕| 国产欧美日韩影院| 成人xxx免费视频播放| 草草在线视频| 精品99在线视频| 亚洲xxx视频| 久久久天堂av| 伊人影院综合在线| 久久国产精品免费视频| 精品影院一区二区久久久| yiren22亚洲综合伊人22| 2020国产精品视频| 国产日韩欧美精品电影三级在线| 丝袜诱惑一区二区| 亚洲乱码一区二区三区| 91精品国产综合久久香蕉的特点| 欧美在线黄色| 国产午夜在线视频| 99精品在线直播| 91电影在线观看| 伊人久久久大香线蕉综合直播| 热草久综合在线| 99久久99久久久精品齐齐| 国产精品成人国产| 波多野结衣家庭教师在线播放| 日韩在线免费视频| 日日天天久久| www日韩在线观看| 欧美人与性动交| 国产精品日韩成人| 成人影院中文字幕| 国产一级粉嫩xxxx| 国产精品免费一区| 91久久久免费一区二区| 国产一区观看| 欧美理论片在线播放| 久久久久亚洲av无码专区喷水| 亚洲区在线播放| 久久久久久电影| 九一成人免费视频| 91在线观看免费观看 | 亚洲最好看的视频| 深夜福利在线看| 国产精品久久777777| 日韩中文字幕视频网| 免费福利影院| 国产女人水真多18毛片18精品| 日韩三区在线观看| 大陆成人av片| 最新国产精品视频| 中文字幕日本在线观看| 一级全黄肉体裸体全过程| 蜜臀久久99精品久久久无需会员| 亚洲乱码日产精品bd| 一区视频在线看| 亚洲风情在线资源| 免费在线观看羞羞视频| 成人看片在线| 夜夜嗨av一区二区三区四区| 国产精品福利影院| 1024日韩| av在线成人| 日本福利片在线| 国产麻豆电影在线观看| 98精品在线视频| 91精品国产综合久久婷婷香蕉| 91在线一区二区| 午夜精品久久久久99热蜜桃导演 | 深夜黄色小视频| 国产欧美日本在线| 中文字幕一区日韩电影| 亚洲成在线观看| 国产精品综合一区二区三区| 欧美人与牛zoz0性行为| 黄色美女视频在线观看| 四虎永久在线高清国产精品| 久久国产精品 国产精品| 久久91亚洲精品中文字幕| 在线看日本不卡| 久久嫩草精品久久久精品一| 日韩一区二区三区免费播放| 日韩免费电影| 亚洲高清成人影院| 男人日女人逼逼| 狼狼综合久久久久综合网| 97国产suv精品一区二区62| 亚洲成人精品久久| 午夜天堂影视香蕉久久|