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

久久国产主播精品| 久久综合伊人77777尤物| 亚洲熟妇无码另类久久久| 亚洲国产精品欧美久久| 日韩午夜一区| 亚洲跨种族黑人xxx| 毛片一区二区三区四区| 啊v在线视频| 极品销魂美女一区二区三区| 久久久黄色av| 丰满岳乱妇一区二区| 人在线成免费视频| 中文幕一区二区三区久久蜜桃| 9.1国产丝袜在线观看| 人妻少妇精品视频一区二区三区| 日韩网站中文字幕| 中文字幕一区二区在线观看| 91精品免费| 亚洲日本韩国在线| 色偷偷综合网| 欧美精品一区二区在线观看| av天堂永久资源网| 国产区在线看| 99re热这里只有精品免费视频| 国产精品∨欧美精品v日韩精品| 自拍偷拍亚洲天堂| 国产高清视频一区二区| 婷婷中文字幕综合| 亚洲蜜桃av| 人妻偷人精品一区二区三区| 日本不卡中文字幕| 久久欧美在线电影| 亚洲一二三四视频| 精品五月天堂| 日韩一二在线观看| 欧美精品成人网| 色婷婷在线播放| 欧美激情一区二区三区不卡| 国产精品一国产精品最新章节| 在线观看污污网站| 红桃视频国产一区| 日韩在线观看免费全| 第四色在线视频| 粉嫩一区二区三区在线观看| 色综合久久综合| 国产免费内射又粗又爽密桃视频| 番号在线播放| 99在线精品免费| 18成人免费观看网站下载| 午夜一区二区三区四区| 一区二区三区福利| 九九精品在线观看| 日韩在线不卡av| 精品无人区一区二区| 欧美一区二区黄| 免费看国产黄色片| 亚洲天堂一区二区| 精品福利在线看| 青青青在线观看视频| 无遮挡动作视频在线观看免费入口| 91亚洲国产成人精品一区二区三 | 午夜精品久久久久久久 | 青春草在线观看| av在线一区二区三区| 99国精产品一二二线| 国产一区二区在线视频聊天| 奇米精品一区二区三区四区| 日本精品久久久久影院| 综合激情网五月| 亚洲精品欧美| 欧美综合在线观看| 国产成人亚洲精品自产在线| 狠狠色狠狠色综合日日tαg| 欧美日韩成人在线观看| 欧美人妻精品一区二区三区| 欧美 日韩 国产 一区| 久久视频在线播放| 国产又粗又硬又长又爽| 欧美日韩在线观看视频小说| 国产亚洲精品美女久久久| 丝袜美腿中文字幕| 国产毛片一区二区三区 | 日本人成精品视频在线| 亚洲天堂一区在线| 毛片一区二区| 国产精品男人爽免费视频1| 综合久久中文字幕| 日本视频免费一区| 国产精品午夜一区二区欲梦| 7777久久亚洲中文字幕| 国产精品资源在线| 动漫美女被爆操久久久| 性生交大片免费看女人按摩| www.欧美亚洲| 色涩成人影视在线播放| 日本激情在线观看| 亚洲精品乱码久久久久久黑人| 国产在线视频综合| av3级在线| 欧美天堂在线观看| 国产免费999| 警花av一区二区三区| 日韩欧美国产综合在线一区二区三区| 九九九久久久久久久| 好吊妞视频这里有精品| 亚洲美女精品久久| 国产白丝一区二区三区| 欧美成人午夜| 57pao国产成人免费| 91视频久久久| 国产精品资源在线看| 久久久久久国产精品mv| 天堂а√在线资源在线| 亚洲成a人在线观看| 免费观看成人在线视频| 在线成人免费| 亚洲精品国产精品国自产观看浪潮| 国产小视频自拍| 99久久综合狠狠综合久久aⅴ| 欧美精品亚州精品| 亚洲精品久久久久久久蜜桃| 国产一区二区伦理| 久久久免费看| av大大超碰在线| 欧美性猛交xxxx免费看| 手机在线国产视频| 免费久久久久久久久| 不卡av电影院| 亚洲精品国产精品国自产网站按摩| 国产成人在线影院| 亚洲最新免费视频| 97成人超碰| 一本色道久久综合狠狠躁篇的优点| 日韩精品一区二区在线播放 | 国产福利久久精品| 成人午夜在线影视| 欧美久久一二三四区| 69视频在线观看免费| 午夜一级久久| 精品国产乱码久久久久久郑州公司 | 久久久久国色av免费看影院| 久久久久免费看黄a片app| 一区二区三区视频播放| 欧美成在线视频| 国产黄色一级大片| 亚洲精品第1页| 中文字幕第10页| 欧美日韩亚洲三区| 大波视频国产精品久久| 日韩影视在线| 亚洲精品一区二区三区99| 国产精品6666| 91在线视频在线| 日本一区二区黄色| 国产一区二区亚洲| 国产精品草莓在线免费观看| 欧美一级特黄aaa| 国产三级在线观看完整版| 欧美日韩色图| 国产精选久久久久久| 欧美高清视频| 欧美一级一级性生活免费录像| 少妇被躁爽到高潮无码文| 国产乱码字幕精品高清av| 超薄肉色丝袜足j调教99| 日本99精品| 午夜剧场成人观在线视频免费观看| 熟妇人妻系列aⅴ无码专区友真希 熟妇人妻av无码一区二区三区 | 免费在线播放第一区高清av| 三区精品视频观看| 欧美成人一二区| 久精品免费视频| 无码国精品一区二区免费蜜桃 | 亚洲一级在线播放| 综合中文字幕亚洲| 免费看91视频| 亚洲欧美日本日韩| 综合网五月天| 欧美黑白配在线| 国产免费一区二区三区香蕉精| а√中文在线8| 日韩国产高清污视频在线观看| 在线观看 亚洲| 国产精品久久久久久久久免费桃花| 青娱乐国产精品视频| 一区二区三区四区五区精品视频| 手机成人在线| 一区二区三区高清在线观看| 国产97在线视频| 成人短视频在线观看| 亚洲精品久久久久| 中文字幕一级片| 亚洲一二三四区| 国产18无套直看片| 成人av网站免费| 天天色综合社区| 亚洲黄页一区| 在线观看亚洲视频啊啊啊啊| 国产成人夜色高潮福利影视| 国产精品三级网站| 96av在线| 日韩中文字幕网站| 黄频网站在线观看| 欧美人伦禁忌dvd放荡欲情| 日韩成人免费观看| 国产精品成人免费在线| 日本丰满少妇裸体自慰| 国产麻豆一精品一av一免费| 日韩视频在线免费看| 午夜精品剧场| 亚洲国产欧美日韩| 欧美日韩大片免费观看| 97se亚洲综合| 日韩成人在线电影| 国产成人精品国内自产拍免费看| 天堂va在线| 久久久精品国产亚洲| 福利在线视频导航| 精品一区二区三区电影| 黄色av网址在线| 欧美一区二区三区四区高清 | 91麻豆精品国产91久久久更新时间 | 欧美视频裸体精品| 久久久久久久久久久97| 国产精品久久久久久久久久久免费看| 内射中出日韩无国产剧情| 懂色中文一区二区在线播放| 亚洲制服中文字幕| 麻豆精品一二三| 一区二区三区免费播放| 日韩一区欧美二区| 免费看a级黄色片| 老牛嫩草一区二区三区日本| 国产妇女馒头高清泬20p多| 亚洲成av人片乱码色午夜| 水蜜桃亚洲精品| 成人午夜国产| 日韩片电影在线免费观看| 窝窝社区一区二区| 好吊色欧美一区二区三区视频| 中文字幕日韩高清在线| 91视频国产高清| 中文成人在线| 91免费欧美精品| 国产乱码精品一区二区三区亚洲人 | 天堂网av手机版| 日韩欧美黄色动漫| 久久久久久久久久成人| 欧美自拍偷拍午夜视频| 日韩久久久久久久久久| 欧美日精品一区视频| 国产精品第六页| 欧美色综合网站| 在线免费观看日韩视频| 欧美日韩精品专区| 国产av无码专区亚洲av| 欧美tickling挠脚心丨vk| 风流少妇一区二区三区91| 精品久久国产字幕高潮| 色欲av伊人久久大香线蕉影院| 亚洲激情视频在线| 国产在线黄色| 日韩网站免费观看| 主播国产精品| 国产91精品久久久久久| a成人v在线| 91香蕉嫩草影院入口| 国产成人一二| 欧洲精品码一区二区三区免费看| 欧美日韩水蜜桃| 国产精品免费看久久久无码| 日韩视频一区| 亚洲老女人av| 国产高清在线精品| 久久人人爽人人人人片| 国产日产亚洲精品系列| 日韩在线一卡二卡| 午夜激情一区二区| 中文 欧美 日韩| 欧美一级二级三级蜜桃| 污污网站免费在线观看| 在线看欧美日韩| 日本乱理伦在线| 国产99久久精品一区二区永久免费| 亚洲欧洲日韩精品在线| 国内外成人免费视频| 精品福利久久久| 成人手机在线播放| 亚洲综合丁香| 日日夜夜精品视频免费观看| 91丨九色porny丨蝌蚪| 国产一区二区精彩视频| 欧美日韩在线一区| 国产精品久久久久久久免费| 亚洲第一网站免费视频| 三级外国片在线观看视频| 97视频国产在线| 国产精品视频一区二区三区| 欧洲视频一区二区三区| 国产精品啊啊啊| 伊人国产在线视频| a亚洲天堂av| 91麻豆免费视频网站| 色呦呦国产精品| 韩国av电影在线观看| 少妇高潮 亚洲精品| 午夜不卡影院| av电影成人| 91欧美在线| 白嫩少妇丰满一区二区| 成人自拍视频在线| 欧美自拍视频在线| 国产精品久久久久久久久久久久久久久久久久 | 午夜视频在线观看一区二区| 一级视频在线播放| 亚洲网站在线观看| 交100部在线观看| 99电影网电视剧在线观看| 久久国产亚洲| www黄色在线| 91丝袜美腿高跟国产极品老师| 九九视频免费观看| 在线综合亚洲欧美在线视频| melody高清在线观看| 青青草一区二区| 久久国产精品色av免费看| 欧美做受777cos| 国产一区在线观看麻豆| 内射毛片内射国产夫妻| 岛国av一区二区| 视频二区在线观看| 久久久久久国产精品| 日韩一区网站| 可以在线看黄的网站| 国产在线精品一区二区三区不卡| 天堂在线中文视频| 色综合网色综合| 男人天堂网在线| 日本在线精品视频| 美女久久久久| 手机看片福利盒子久久| 久久精品视频一区| av一级在线观看| 亚洲欧美国产精品| 亚洲欧美小说色综合小说一区| 国产一区二区久久久| 亚洲精品人人| 国产精品300页| 色综合咪咪久久| 成年在线电影| 成人免费午夜电影| 欧美xxx在线观看| jjzzjjzz欧美69巨大| 午夜精品福利视频网站| 你懂的视频在线| 国产精品美女久久久久av超清| 日韩一区二区中文| 久久6免费视频| 亚洲电影在线播放| 午夜一区在线观看| 国产精品高潮粉嫩av| 91亚洲国产高清| 日本黄色www| 香蕉影视欧美成人| 久热av在线| 成人网在线视频| 亚洲激情影院| 非洲一级黄色片| 色综合天天综合在线视频| 91福利在线视频| 成人欧美视频在线| 久久精品系列| 青青青在线免费观看| 亚洲国产美女精品久久久久∴| 日韩精品一区二区三区| 久久久一二三四| eeuss影院一区二区三区| 波多野结衣小视频| 九九热这里只有精品6| 神马日本精品| 91aaa精品| 欧美日韩国产影院| 永久免费av在线| 国产日产精品一区二区三区四区| 久久一区二区三区四区五区 | 精品久久久久久亚洲精品| yjizz视频网站在线播放| 91精品国产高清久久久久久91裸体 | 国产黄色小视频在线观看| 日本午夜在线亚洲.国产| 91精品国产乱码久久久久久久| 一区二区免费在线观看视频| 欧美图区在线视频| 91视频欧美| 在线日韩av永久免费观看| 暴力调教一区二区三区| 影音先锋国产资源| 国产91精品久久久| 午夜久久福利| 欧美88888|