摘要:場(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
摘要:最近開展了三次設(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ì)模式不...
摘要:構(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 本文...
摘要:在工廠方法模式中,我們會(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ì)象,或者是線程池。這些...
摘要:總之,選擇單例模式就是為了避免不一致狀態(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í)例?!?..
摘要:本文介紹一些來自投資銀行的針對(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 等等那樣的投資銀行做...
閱讀 1807·2023-04-26 00:47
閱讀 1558·2021-11-11 16:55
閱讀 2633·2021-09-27 14:04
閱讀 3562·2021-09-22 15:58
閱讀 3564·2021-07-26 23:38
閱讀 2143·2019-08-30 13:47
閱讀 1994·2019-08-30 13:15
閱讀 1159·2019-08-29 17:09