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

面試官:JDK中都用了哪些設計模式?

開發 前端
單例模式保證一個類只有一個實例,并提供一個全局訪問點。工廠模式提供了一種將對象創建的過程封裝在一個單獨的類中的方法,這個類就是工廠類。

設計模式是前輩們經過實踐驗證總結的解決方案,幫助我們構建出更具可維護性、可擴展性和可讀性的代碼。當然,在面試的過程中,也會或多或少的被問到。那么今天,我們就來看一道設計模式中的常見面試問題:JDK 中都用了哪些設計模式?

我按照大家比較熟悉且好理解的方式,把  JDK 中使用的設計模式總結了一下,如下圖所示:

那么,接下來我們一個個來看。

1.單例模式

單例模式保證一個類只有一個實例,并提供一個全局訪問點。

Runtime 類使用了單例模式,如下源碼可知:

public class Runtime {
    private static final Runtime currentRuntime = new Runtime();
    private static Version version;
    /**
     * Returns the runtime object associated with the current Java application.
     * Most of the methods of class {@code Runtime} are instance
     * methods and must be invoked with respect to the current runtime object.
     *
     * @return  the {@code Runtime} object associated with the current
     *          Java application.
     */
    public static Runtime getRuntime() {
        return currentRuntime;
    }
    /** Don't let anyone else instantiate this class */
    private Runtime() {}
    // 省略其他源碼
}

從以上源碼可以看出,Runtime 使用的餓漢方式實現了單例模式。

2.工廠模式

工廠模式提供了一種將對象創建的過程封裝在一個單獨的類中的方法,這個類就是工廠類。

線程池中的所有線程的創建都是通過工廠創建的,使用的就是工廠模式,具體源碼如下:

3.代理模式

代理模式是一種為其他對象提供一種代理以控制對這個對象的訪問的設計模式。代理對象在客戶端和目標對象之間起到中介的作用,并且可以去掉客戶不能看到的內容和服務或者添加客戶需要的額外服務。

JDK 內置了動態代理的功能,動態代理是代理模式的一種實現,它是由 java.lang.reflect.Proxy 類提供的。

Proxy 使用 Demo 如下:

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

// 1.接口
interface Subject {
    void doSomething();
}

// 2.目標類(被代理類)
class RealSubject implements Subject {
    @Override
    public void doSomething() {
        System.out.println("RealSubject is doing something");
    }
}

// 3.動態代理類
class DynamicProxyHandler implements InvocationHandler {
    private Object target;
    DynamicProxyHandler(Object target) {
        this.target = target;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("Before calling method");
        Object result = method.invoke(target, args);
        System.out.println("After calling method");
        return result;
    }
}

public class JDKProxyDemo {
    public static void main(String[] args) {
        // 創建真實對象
        Subject realSubject = new RealSubject();
        // 創建動態代理處理器
        InvocationHandler handler = new DynamicProxyHandler(realSubject);
        // 創建代理對象
        Subject proxySubject = (Subject) Proxy.newProxyInstance(
            realSubject.getClass().getClassLoader(),
            realSubject.getClass().getInterfaces(),
            handler);
        // 調用代理對象的方法
        proxySubject.doSomething();
    }
}

4.迭代器模式

迭代器模式能夠提供一種簡單的方法來遍歷容器中的每個元素。通過迭代器,用戶可以輕松地訪問容器中所有的元素,簡化了編程過程。

Iterable 就是標準的迭代器模式,Collection 就是 Iterator 的子類,它的使用代碼如下:

import java.util.ArrayList;
import java.util.Iterator;

public class IteratorDemo {
    public static void main(String[] args) {
        // 創建一個 ArrayList 并添加元素
        ArrayList<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Orange");

        // 獲取迭代器
        Iterator<String> iterator = list.iterator();

        // 使用迭代器遍歷集合
        while (iterator.hasNext()) {
            String fruit = iterator.next();
            System.out.println("Fruit: " + fruit);
        }
    }
}

5.模版方法模式

模板方法模式(Template Method Pattern)定義了一個操作中的算法骨架,將一些步驟延遲到子類中實現。模板方法使得子類可以在不改變算法結構的情況下,重新定義算法中的某些步驟。

在 AQS(AbstractQueuedSynchronizer) 中,acquire 方法和 release 方法使用了模板方法模式。

這些方法之所以被認為是模板方法模式,是因為它們定義了一個操作的基本框架或流程,但其中的某些關鍵步驟被設計為抽象方法,留給子類去具體實現。

以 acquire 方法為例,它大致的流程包括嘗試獲取資源、如果獲取失敗則將當前線程加入等待隊列、阻塞線程等步驟。但是具體如何判斷能否獲取資源(通過調用 tryAcquire 方法),以及在獲取失敗后的一些處理細節,是由子類去實現的,具體源碼如下:

protected boolean tryAcquire(int arg) {
throw new UnsupportedOperationException();
}

例如,基于 AQS 實現的 ReentrantLock 中就重寫了 tryAcquire 方法,實現源碼如下:

6.裝飾器模式

裝飾器模式是在不修改原對象的基礎上,動態地給對象添加額外功能的設計模式。

BufferedInputStream 就是典型裝飾器模式,當使用普通的 InputStream 讀取數據時,每次可能都會進行實際的 I/O 操作,而 BufferedInputStream 會先將一部分數據讀入緩沖區,后續的讀取操作可以直接從緩沖區獲取,減少了實際的 I/O 次數。

例如以下代碼:

InputStream inputStream = new FileInputStream("file.txt");
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);

BufferedInputStream 并沒有改變 FileInputStream 的基本結構和接口,只是為其添加了緩沖的特性

7.策略模式

策略模式定義了一系列可互換的算法,并將每一個算法封裝起來,使它們可以互相替換。

Comparator 是策略模式的一個典型例子,Comparator 接口定義了一個比較兩個對象的方法 compare(T o1, T o2)。這個接口允許用戶定義不同的比較策略,使得我們可以靈活地改變排序或比較邏輯。

例如以下示例代碼:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class StrategyPatternExample {
    static class Person {
        private String name;
        private int age;
        // 忽略 Setter、Getter 等方法
    }
    // 按照年齡升序排列
    static class AgeComparator implements Comparator<Person> {
        @Override
        public int compare(Person p1, Person p2) {
            return Integer.compare(p1.getAge(), p2.getAge());
        }
    }
    // 按照姓名降序排列
    static class NameDescendingComparator implements Comparator<Person> {
        @Override
        public int compare(Person p1, Person p2) {
            return p2.getName().compareTo(p1.getName());
        }
    }
    public static void main(String[] args) {
        ArrayList<Person> people = new ArrayList<>();
        people.add(new Person("Alice", 30));
        people.add(new Person("Bob", 25));
        people.add(new Person("Charlie", 35));

        // 使用年齡升序的策略
        Collections.sort(people, new AgeComparator());

        // 使用姓名降序的策略
        Collections.sort(people, new NameDescendingComparator());
    }
}

8.建造者模式

建造者模式是一種創建型設計模式,用于通過一系列的步驟來創建復雜的對象。它將對象的構建過程與其表示相分離,使得同樣的構建過程可以創建不同的表示。

在 JDK 中,使用建造者模式的常見例子是 StringBuilder 和 StringBuffer 類。

雖然這兩個類本身不是傳統意義上的建造者模式實現(因為建造者模式通常用于構建不同的表示或者不同部分的同一個對象),它們提供了一種鏈式調用的方式來構建和修改字符串,這在某種程度上體現了建造者模式的思想。

例如以下代碼:

public class StringBuilderDemo {  
    public static void main(String[] args) {  
        // 使用 StringBuilder 構建和修改字符串  
        StringBuilder builder = new StringBuilder();  
        builder.append("Hello")  
        .append(", ")  
        .append("world")  
        .append("!")  
        .insert(7, "beautiful ")  
        .deleteCharAt(13);  

        // 輸出構建和修改后的字符串  
        System.out.println(builder.toString());  
        // 輸出: Hello, beautiful world!  
    }  
}

StringBuilder 通過鏈式調用 append、insert 和 deleteCharAt 方法來逐步構建和修改字符串。這種方式使得構建和修改字符串的過程更加流暢和易于閱讀。

責任編輯:姜華 來源: 磊哥和Java
相關推薦

2019-05-29 17:20:07

Spring設計模式Java

2020-03-18 09:43:37

開發技能代碼

2024-05-30 07:37:30

2023-07-11 08:50:34

2022-11-23 07:41:52

JDKStream關鍵字

2021-10-29 09:40:21

設計模式軟件

2023-02-20 08:08:48

限流算法計數器算法令牌桶算法

2021-08-02 17:21:08

設計模式訂閱

2025-03-26 01:25:00

MySQL優化事務

2024-03-07 17:21:12

HotSpotJVMHot Code

2021-05-10 08:01:12

BeanFactoryFactoryBean容器

2024-02-26 14:07:18

2024-03-12 14:36:44

微服務HTTPRPC

2024-04-19 00:00:00

計數器算法限流算法

2022-04-29 08:17:38

RPC遠程代理代理模式

2023-07-05 08:17:38

JDK動態代理接口

2022-05-23 08:43:02

BigIntJavaScript內置對象

2024-08-19 09:13:02

2015-01-05 09:53:05

Java

2025-09-26 07:58:58

點贊
收藏

51CTO技術棧公眾號

欧美国产乱视频| 日韩精品专区在线影院观看| 亚洲精品二区| 国产又大又黄的视频| 午夜欧美视频| 国产视频亚洲精品| 四虎成人在线播放| 亚洲美女炮图| 亚洲情趣在线观看| 久久久久久国产精品一区| 伊人网综合在线| 红桃视频国产一区| 在线播放日韩欧美| 国产黑丝在线观看| 亚洲一区有码| 色综合中文综合网| 午夜久久久久久久久久久| 日本天堂影院在线视频| 国产一区二区久久| 国产精品第2页| 精品无码人妻一区二区三区品| 免费欧美激情| 精品日韩一区二区| 中文字幕日韩综合| 美脚恋feet久草欧美| 亚洲午夜久久久久久久久久久| 视频在线精品一区| 香蕉视频成人在线| 成人午夜免费av| 91精品视频免费看| 性高潮视频在线观看| 国产欧美在线| 欧美成人精品h版在线观看| 中文字幕成人动漫| 亚洲精品**不卡在线播he| 欧美刺激脚交jootjob| mm131国产精品| 欧美黑人粗大| 欧美日韩免费一区| 国产情侣第一页| а√天堂资源地址在线下载| 国产精品美女久久久久久久网站| 久久一区二区三区欧美亚洲| 亚洲精品国偷拍自产在线观看蜜桃 | 中文在线一区| 久久久久久久久久久av| 久久精品99国产精| 国产综合色产| 久久久久国产精品免费| 久久免费在线观看视频| 午夜视频一区| 欧美国产日韩免费| 久草视频免费在线播放| 欧美精选在线| 欧美丰满少妇xxxxx| 久操视频免费在线观看| 欧美日韩91| 欧美理论片在线观看| 午夜写真片福利电影网| 欧美.日韩.国产.一区.二区| 九九精品视频在线| 免费又黄又爽又色的视频| 欧美国产先锋| 久久乐国产精品| 欧美成人aaaaⅴ片在线看| 国产日韩欧美一区| 国产ts一区二区| 波多野结衣小视频| 麻豆精品国产传媒mv男同 | 国产美女www爽爽爽| 日本女优在线视频一区二区| 国产欧美中文字幕| jizz中国少妇| 不卡av在线免费观看| 久久久久国产精品视频| 3p在线观看| 亚洲欧美欧美一区二区三区| 丁香色欲久久久久久综合网| 理论不卡电影大全神| 色八戒一区二区三区| 亚洲娇小娇小娇小| 美女精品久久| 亚洲免费视频一区二区| 战狼4完整免费观看在线播放版| 91精品精品| 久久久久久这里只有精品| 尤物视频免费观看| 国产在线一区二区综合免费视频| 国产精品99久久久久久久| 奇米影视888狠狠狠777不卡| 国产欧美日韩激情| 国产成人一区二区三区别| 在线中文字幕播放| 欧美精品粉嫩高潮一区二区| 美女伦理水蜜桃4| 国产欧美一区| 色综合久综合久久综合久鬼88| 青青草成人av| 精品一区二区三区av| 国产精品久久精品国产| 春暖花开成人亚洲区| 亚洲一区二区视频| 亚洲欧美日韩一级| 巨人精品**| 久久精品国产96久久久香蕉| 97久久久久久久| 精品一区二区三区蜜桃| 久久99精品久久久久久秒播放器| 老司机午夜在线| 欧美日韩国产综合视频在线观看中文| 天天爽夜夜爽一区二区三区| 美腿丝袜亚洲图片| 伦伦影院午夜日韩欧美限制| 一级久久久久久| 不卡的av网站| 精品人妻人人做人人爽| www.成人在线视频| 日韩二区三区在线| 欧美精品成人久久| 久久激情综合网| 欧美日韩一区二| av在线小说| 日韩一区二区在线观看视频| 正在播放国产对白害羞| 亚洲欧美日韩一区在线观看| 99re国产视频| av免费在线免费观看| 欧美日韩视频专区在线播放| www.av欧美| 一本久道久久综合婷婷鲸鱼| 91一区二区三区| 欧美人xxx| 精品1区2区3区| 国内精品卡一卡二卡三| 蜜桃久久av| 精品一卡二卡三卡四卡日本乱码| 制服丝袜中文字幕在线| 日韩一区二区精品在线观看| 杨钰莹一级淫片aaaaaa播放| 美女免费视频一区| 亚洲国产一区二区在线| 主播大秀视频在线观看一区二区| 日韩成人中文电影| 国产成人无码精品久久久久| 成人短视频下载| 亚洲熟妇无码av在线播放| 精品99re| 欧美激情精品在线 | 日韩久久免费视频| 日本熟妇毛茸茸丰满| 99免费精品在线| 成人性生活视频免费看| 老司机成人在线| 97精品在线视频| 天堂v视频永久在线播放| 富二代精品短视频| 91网站免费视频| 日本不卡视频一二三区| 一区不卡视频| 精品一区91| 国外成人在线播放| 免费在线视频一级不卡| 欧美亚洲综合一区| 成人一级黄色大片| 国产成人精品综合在线观看 | 日韩国产高清在线| 亚洲精品乱码视频| 韩国三级成人在线| 久久久久久久久亚洲| 天堂av电影在线观看| 91高清视频免费看| 日韩在线中文字幕视频| 成年人国产精品| 日本在线视频www| 日韩欧美1区| 91免费在线观看网站| 僵尸再翻生在线观看| 中文字幕精品久久久久| 精品二区在线观看| 色综合久久88色综合天天6| 久久久精品成人| 国产高清不卡二三区| 欧美 日韩 激情| 欧美jizz| 国产一区二区三区四区五区加勒比| 樱花草涩涩www在线播放| 在线视频中文亚洲| 懂色av成人一区二区三区| 一本色道亚洲精品aⅴ| 国产一二三区精品| 91美女在线观看| 国产免费中文字幕| 亚洲在线成人| 色婷婷777777仙踪林| 久久99国产成人小视频| eeuss一区二区三区| 亚洲高清黄色| 欧美激情区在线播放| h视频在线观看免费| 精品剧情在线观看| 在线免费av片| 狠狠躁天天躁日日躁欧美| 成人一级黄色大片| 久久久久久久av麻豆果冻| 天天爽夜夜爽视频| 日本免费在线视频不卡一不卡二| av在线播放天堂| 91精品天堂福利在线观看| 免费成人在线观看av| 日韩精品免费视频一区二区三区| 国产激情综合五月久久| heyzo高清国产精品| 久久视频在线视频| 波多野结衣一区二区| 日韩精品视频中文在线观看| 国产高清在线免费| 欧美日韩一级黄| 成人公开免费视频| 午夜欧美在线一二页| 欧美国产日韩在线观看成人| 国产精品人妖ts系列视频| 久久亚洲AV成人无码国产野外| 国产毛片精品一区| 波多野结衣xxxx| 日韩精品视频网站| 日本福利视频在线| 韩日欧美一区| 一本色道久久88亚洲精品综合| 日本久久黄色| 色一情一乱一伦一区二区三区丨| 欧美日日夜夜| 国产精品污www一区二区三区| 国产精品一区二区精品| 国产美女精品视频| 久久亚洲精品爱爱| 国产精品久久久久久久美男 | 91欧美在线视频| 亚洲石原莉奈一区二区在线观看| 日本ー区在线视频| 亚洲女人天堂视频| 三级做a全过程在线观看| 亚洲国产毛片完整版| 色噜噜一区二区三区| 欧美精品一区视频| 无码精品黑人一区二区三区| 亚洲国产精品成人精品 | 亚洲一区二区黄| 黄色电影免费在线看| 亚洲天堂网在线观看| 毛片在线免费| 中日韩美女免费视频网址在线观看| 黄色片视频在线观看| 一区二区三区日韩在线| a天堂在线资源| 久久九九全国免费精品观看| 麻豆网站视频在线观看| 欧美成aaa人片免费看| 欧美草逼视频| 69视频在线免费观看| 在线观看欧美日韩电影| 国产精品成人va在线观看| 懂色aⅴ精品一区二区三区| 91精品国产自产在线| 国产 日韩 欧美| 国产精品区一区| 自拍偷拍一区| 亚洲精品一品区二品区三品区| 国产精品久久久久久久久妇女| 裸体裸乳免费看| 好吊一区二区三区| 国产淫片免费看| 欧美aaa在线| 少妇性l交大片7724com| 不卡一卡二卡三乱码免费网站| 久久偷拍免费视频| 中文字幕一区二区三中文字幕| 丰满少妇高潮久久三区| 欧美日韩亚洲国产一区| 在线视频欧美亚洲| 亚洲第一av网| www.国产精品.com| 欧美肥臀大乳一区二区免费视频| 久久sese| 91久久精品www人人做人人爽 | 国产一区二区三区四区在线观看| 中文字幕天堂网| 国产欧美一二三区| 欧美三级小视频| 色偷偷一区二区三区| aaa一区二区| 国产一区二区三区欧美| 特级毛片在线| 国产成人综合久久| 综合伊人久久| 中文字幕一区二区三区精彩视频 | 国产草草影院ccyycom| 亚洲精品久久久久久久久久久久久| www.视频在线.com| 午夜精品久久久久久久久久久久| 欧美a一级片| 精品伊人久久大线蕉色首页| 亚洲五月综合| 日韩精品一区中文字幕| 成人免费视频播放| 成人在线观看小视频| 色综合天天狠狠| 日本成人动漫在线观看| 久久精品91久久香蕉加勒比| 成人av三级| 国产精品夜夜夜一区二区三区尤| 久久中文字幕av| 国产免费成人在线| 成人av在线影院| 青青草国产在线观看| 欧美视频在线播放| 深夜影院在线观看| 久久久久久久久久久免费| 欧美日韩黄网站| 一卡二卡3卡四卡高清精品视频| 午夜一级在线看亚洲| 久久久久久婷婷| 亚洲精品视频一区二区| 国产精品探花视频| 中文字幕欧美国内| 日本美女久久| 欧美污视频久久久| 国产美女一区| 午夜一区二区三区免费| 亚洲无线码一区二区三区| 99视频免费看| 久久躁狠狠躁夜夜爽| **国产精品| 伊人精品久久久久7777| 美日韩一区二区三区| 可以直接在线观看的av| 精品奇米国产一区二区三区| 日本成a人片在线观看| 国产精品免费久久久| 国产日产一区| 成人一级片网站| 久久欧美中文字幕| 4438国产精品一区二区| 日韩福利视频在线观看| 中文字幕在线直播| 牛人盗摄一区二区三区视频| 亚洲欧美日韩精品一区二区| 熟女丰满老熟女熟妇| 欧美性猛交xxxxx免费看| 日本在线丨区| 日韩av免费在线看| 经典一区二区| 日本成人中文字幕在线| 国产嫩草影院久久久久| 最新中文字幕在线观看视频| 亚洲天堂开心观看| 99亚洲伊人久久精品影院| 亚洲视频在线观看日本a| 九一久久久久久| 日本午夜在线观看| 日韩免费视频一区二区| 国产盗摄精品一区二区酒店| 国产一区二区视频在线免费观看| 夜夜嗨av一区二区三区网站四季av| 风间由美一二三区av片| 在线亚洲+欧美+日本专区| 69av亚洲| 国产99视频精品免费视频36| 亚洲麻豆av| 天天舔天天操天天干| 欧美精品久久天天躁| 波多野结衣精品| 欧美1o一11sex性hdhd| 日产国产欧美视频一区精品| 欧美激情精品久久久久久免费| 日韩欧美高清一区| 中老年在线免费视频| 亚洲福利av| 国产.欧美.日韩| 中文字幕在线欧美| 日韩最新在线视频| 成人另类视频| 能看的毛片网站| 一区二区三区丝袜| 裸体xxxx视频在线| 成人a在线视频| 一本一本久久| 欧美性生给视频| 亚洲韩国日本中文字幕| 99九九久久| 国产二级片在线观看| 国产精品初高中害羞小美女文 | 日韩精品一区二区三区四区| 制服丝袜专区在线| 国产精品久久久影院| 久久婷婷国产综合国色天香| 国产人妻精品一区二区三| 欧洲亚洲妇女av| 亚洲一区 二区 三区| 白白色免费视频| 精品国产一区二区三区四区四 |