成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

工廠模式 + 單例模式(并發(fā)生成單例)

GHOST_349178 / 3309人閱讀

摘要:場(chǎng)景一個(gè)發(fā)送者可以發(fā)送郵件或者短信,為日后擴(kuò)展發(fā)送文件功能,可以定義短信工廠和郵件工廠生產(chǎn)發(fā)送者,為方便管理,提供一個(gè)工廠管理類負(fù)責(zé)生成工廠實(shí)例,其能保證生成的工廠實(shí)例唯一。短信工廠郵件工廠

描述:對(duì)象的新建統(tǒng)一由工廠創(chuàng)建,避免客戶端直接通過構(gòu)造方法新建實(shí)例;對(duì)于創(chuàng)建對(duì)象的工廠可以可以使其在整個(gè)應(yīng)用中保持唯一的實(shí)例,避免過多的垃圾工廠對(duì)象。

場(chǎng)景:一個(gè)<發(fā)送者>可以發(fā)送郵件或者短信,為日后擴(kuò)展發(fā)送文件功能,可以定義短信工廠郵件工廠生產(chǎn)<發(fā)送者>,為方便管理,提供一個(gè)工廠管理類負(fù)責(zé)生成工廠實(shí)例,其能保證生成的工廠實(shí)例唯一。

實(shí)現(xiàn):

定義發(fā)送者:

interface Sender {
    public void send(String message);
}

實(shí)現(xiàn)短信發(fā)送者:

class SmsSender implements Sender {
    @Override
    public void send(String message) {
        System.out.println("發(fā)送短信:" + message);
    }
}

實(shí)現(xiàn)郵件發(fā)送者:

class EmailSender implements Sender {
    @Override
    public void send(String message) {
        System.out.println("發(fā)送郵件:" + message);
    }
}

定義工廠,專門負(fù)責(zé)生產(chǎn)發(fā)送者:

interface Factory {
    Sender getSender();
}

定義一個(gè)具體的短信發(fā)送者工廠:

class SmsFactory implements Factory {
    @Override
    public Sender getSender() {
        return new SmsSender();
    }
}

定義一個(gè)具體的郵件發(fā)送者工廠:

class EmailFactory implements Factory {
    @Override
    public Sender getSender() {
        return new EmailSender();
    }
}

定義一個(gè)工廠管理者,負(fù)責(zé)生成具體的工廠實(shí)例;這里特意使用兩種方式生成工廠實(shí)例,基本保證了并發(fā)情況下生成工廠的唯一實(shí)例;對(duì)于同步的實(shí)現(xiàn),僅有在工廠為空的情況下才存在同步。

class FactoryManager {
    private static class SingletoSmsFactory {
        private static Factory instance = new SmsFactory();

        private static Factory getInstance() {
            return SingletoSmsFactory.instance;
        }
    }
    private static class SingletoEmailFactory {
        private static Factory instance = null;
        private static synchronized void initInstance() {
            if(null == instance) {
                instance = new  EmailFactory();
            }
        }
        private static Factory getInstance() {
            if(null == instance) {
                initInstance();
            }
            return instance;
        }
    }

    public static Factory getFactory(Class clazz) {
        String className = clazz.getName();
        Factory factory = null;
        if(className.equals(SmsFactory.class.getName())) {
            factory = SingletoSmsFactory.getInstance();
        }
        if(className.equals(EmailFactory.class.getName())) {
            factory = SingletoEmailFactory.getInstance();
        }
        return factory;
    }
}

客戶端調(diào)用,循環(huán)10次是為了查看多次生成的工廠實(shí)例是否唯一。

public static void main(String[] args) {
    for(int i=0; i<10; i++) {
        Factory smsFactory = FactoryManager.getFactory(SmsFactory.class);
        Sender sender = smsFactory.getSender();
        sender.send("hello world!");
        System.out.println("短信工廠:" + smsFactory);

        Factory emailFactory = FactoryManager.getFactory(EmailFactory.class);
        sender = emailFactory.getSender();
        sender.send("hello world!");
        System.out.println("郵件工廠:" + emailFactory);
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64029.html

相關(guān)文章

  • 優(yōu)才公開課筆記:php設(shè)計(jì)模式(一) 之單例模式

    摘要:最近開展了三次設(shè)計(jì)模式的公開課,現(xiàn)在來總結(jié)一下設(shè)計(jì)模式在中的應(yīng)用,這是第一篇?jiǎng)?chuàng)建型模式之單例模式。不過因?yàn)椴恢С侄嗑€程所以不需要考慮這個(gè)問題了。 最近開展了三次設(shè)計(jì)模式的公開課,現(xiàn)在來總結(jié)一下設(shè)計(jì)模式在PHP中的應(yīng)用,這是第一篇?jiǎng)?chuàng)建型模式之單例模式。 一、設(shè)計(jì)模式簡(jiǎn)介 首先我們來認(rèn)識(shí)一下什么是設(shè)計(jì)模式: 設(shè)計(jì)模式是一套被反復(fù)使用、容易被他人理解的、可靠的代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。 設(shè)計(jì)模式不...

    guyan0319 評(píng)論0 收藏0
  • Java進(jìn)階1 —— 對(duì)象的創(chuàng)建與銷毀

    摘要:構(gòu)造方法是在對(duì)象實(shí)例初始化過程中具有舉足輕重的地位,并且提供了多種方式來定義構(gòu)造方法。在中創(chuàng)建對(duì)象的開銷是相當(dāng)?shù)偷?,并且速度很快。?duì)象終結(jié)器前面我們講述的都是構(gòu)造方法和對(duì)象初始化相關(guān)的主題,但還未提及他們的反面對(duì)象銷毀。 原文鏈接:http://www.javacodegeeks.com/2015/09/how-to-create-and-destroy-objects.html 本文...

    nemo 評(píng)論0 收藏0
  • python之單例模式工廠模式

    摘要:在工廠方法模式中,我們會(huì)遇到一個(gè)問題,當(dāng)產(chǎn)品非常多時(shí),繼續(xù)使用工廠方法模式會(huì)產(chǎn)生非常多的工廠類。從簡(jiǎn)單工廠模式到抽象工廠模式,我們都是在用后一種模式解決前一種模式的缺陷,都是在最大程度降低代碼的耦合性。 單例模式 所謂單例模式,也就是說不管什么時(shí)候我們要確保只有一個(gè)對(duì)象實(shí)例存在。很多情況下,整個(gè)系統(tǒng)中只需要存在一個(gè)對(duì)象,所有的信息都從這個(gè)對(duì)象獲取,比如系統(tǒng)的配置對(duì)象,或者是線程池。這些...

    jayce 評(píng)論0 收藏0
  • Java基礎(chǔ)學(xué)習(xí)——多線程之單例設(shè)計(jì)模式(轉(zhuǎn))

    摘要:總之,選擇單例模式就是為了避免不一致狀態(tài),避免政出多頭。二餓漢式單例餓漢式單例類在類初始化時(shí),已經(jīng)自行實(shí)例化靜態(tài)工廠方法餓漢式在類創(chuàng)建的同時(shí)就已經(jīng)創(chuàng)建好一個(gè)靜態(tài)的對(duì)象供系統(tǒng)使用,以后不再改變,所以天生是線程安全的。 概念:  Java中單例模式是一種常見的設(shè)計(jì)模式,單例模式的寫法有好幾種,這里主要介紹兩種:懶漢式單例、餓漢式單例?! 卫J接幸韵绿攸c(diǎn):  1、單例類只能有一個(gè)實(shí)例?!?..

    dendoink 評(píng)論0 收藏0
  • 來自投資銀行的 10 個(gè) Java 面試題

    摘要:本文介紹一些來自投資銀行的針對(duì)三年以上經(jīng)驗(yàn)的開發(fā)人員面試題。第七題和這兩個(gè)方法有什么不同答案本題取自我的投資銀行針對(duì)有經(jīng)驗(yàn)的開發(fā)者的五十個(gè)多線程面試題列表。總結(jié)以上就是投資銀行通常會(huì)出的面試題。 原文地址: https://dzone.com/articles/10... 有為數(shù)不少的開發(fā)者希望能在像 Barclays、Credit Suisse、Citibank 等等那樣的投資銀行做...

    xbynet 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<