版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
您的設(shè)計(jì)模式目錄第章策略模式【STRATEGYPATTERN】 41第章模式【PROXYPATTERN】 82第章單例模式【SINGLETONPATTERN】 123第章多例模式【MULTITIONPATTERN】 164第章工廠模式【FACTORYMETHODPATTERN】 195第章抽象工廠模式【ABSTRACTFACTORYPATTERN】 316第章門面模式【FACADEPATTERN】 447第章適配器模式【ADAPTERPATTERN】 518第章模板模式【TEMPLATEMETHODPATTERN】 639第章建造者模式【BUILDERPATTERN】 8210第章橋梁模式【BRIDGEPATTERN】 您的設(shè)計(jì)模式目錄第章策略模式【STRATEGYPATTERN】 41第章模式【PROXYPATTERN】 82第章單例模式【SINGLETONPATTERN】 123第章多例模式【MULTITIONPATTERN】 164第章工廠模式【FACTORYMETHODPATTERN】 195第章抽象工廠模式【ABSTRACTFACTORYPATTERN】 316第章門面模式【FACADEPATTERN】 447第章適配器模式【ADAPTERPATTERN】 518第章模板模式【TEMPLATEMETHODPATTERN】 639第章建造者模式【BUILDERPATTERN】 8210第章橋梁模式【BRIDGEPATTERN】 9711第章命令模式【DPATTERN】 11212第章裝飾模式【DECORATORPATTERN】 12613第章迭代器模式【ITERATORPATTERN】 13714第章組合模式【COMPOSITEPATTERN】 14715第章觀察者模式【OBSERVERPATTERN】 17516第章責(zé)任鏈模式【CHAINOFRESPONSIBILITYPATTERN】 19417第章者模式【VISITORPATTERN】 21018第章?tīng)顟B(tài)模式【STATEPATTERN】 23619第章原型模式【PROTOTYPEPATTERN】 25520第章中介者模式【MEDIATORPATTERN】 26821第章解釋器模式【INTERPRETERPATTERN】 28622第章亨元模式【FLYWEIGHTPATTERN】 28723第章備忘錄模式【MEMENTOPATTERN】 28824第章模式大PK 28925第章六大設(shè)計(jì)原則 29026單一職責(zé)原則【SINGLERESPONSIBILITYPRINCIPLE】 290里氏替換原則【LISKOVSUBSTITUTIONPRINCIPLE】 297第2頁(yè)您的設(shè)計(jì)模式依賴倒置原則【DEPENDENCEINVERSIONPRINCIPLE】 309接口 原則【INTERFACESEGREGATIONPRINCIPLE】 310法則【您的設(shè)計(jì)模式依賴倒置原則【DEPENDENCEINVERSIONPRINCIPLE】 309接口 原則【INTERFACESEGREGATIONPRINCIPLE】 310法則【LOWOFDEMETER】 32026.526.6 開(kāi)閉原則【OPENPRINCIPLE】 330第27章混編模式講解 332第28章更新:334相關(guān)說(shuō)明 335相關(guān)說(shuō)明 335第29章后序 336第3頁(yè)您的設(shè)計(jì)模式1章給(伴郎)三個(gè)錦囊妙計(jì),說(shuō)是按拆開(kāi)解決棘手問(wèn)題,嘿,還別說(shuō),真是解決了大問(wèn)題,搞到最后是了夫人又折兵呀,那咱們先看看這個(gè)場(chǎng)景是什么樣子的。先說(shuō)這個(gè)場(chǎng)景中的要素:計(jì),一個(gè)錦囊,一個(gè),妙計(jì)是同志給的,妙計(jì)是放置在錦囊里,俗稱就是錦囊妙計(jì)嘛,那就是一個(gè)干活的人,從錦囊中取出妙計(jì),執(zhí)行,然后獲勝,用JAVA程序怎么表現(xiàn)這個(gè)呢?我們先看類圖:計(jì)是同一類型的東東,那咱就寫個(gè)接口:packagecom.cbf4life.strategy;/**@authorcbf4Lifecbf4life@126.comI'mglad您的設(shè)計(jì)模式1章給(伴郎)三個(gè)錦囊妙計(jì),說(shuō)是按拆開(kāi)解決棘手問(wèn)題,嘿,還別說(shuō),真是解決了大問(wèn)題,搞到最后是了夫人又折兵呀,那咱們先看看這個(gè)場(chǎng)景是什么樣子的。先說(shuō)這個(gè)場(chǎng)景中的要素:計(jì),一個(gè)錦囊,一個(gè),妙計(jì)是同志給的,妙計(jì)是放置在錦囊里,俗稱就是錦囊妙計(jì)嘛,那就是一個(gè)干活的人,從錦囊中取出妙計(jì),執(zhí)行,然后獲勝,用JAVA程序怎么表現(xiàn)這個(gè)呢?我們先看類圖:計(jì)是同一類型的東東,那咱就寫個(gè)接口:packagecom.cbf4life.strategy;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*首先定一個(gè)策略接口,這是**/老人家給的三個(gè)錦囊妙計(jì)的接口publicinterfaceIStrategy{//每個(gè)錦囊妙計(jì)都是一個(gè)可執(zhí)行的算法publicvoidoperate();}第4頁(yè)您的設(shè)計(jì)模式然后再寫三個(gè)實(shí)現(xiàn)類,有計(jì)嘛:packagecom.cbf4life.strategy;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*找喬 幫忙,使*/不能殺publicclass您的設(shè)計(jì)模式然后再寫三個(gè)實(shí)現(xiàn)類,有計(jì)嘛:packagecom.cbf4life.strategy;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*找喬 幫忙,使*/不能殺publicclassBackDoorimplementsIStrategy{publicvoidoperate(){找喬}幫忙,讓給施加");}packagecom.cbf4life.strategy;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*求*/開(kāi)個(gè)綠燈publicclassGivenGreenLightimplementsIStrategy{publicvoidoperate(){求}開(kāi)個(gè)綠燈,放行!");}packagecom.cbf4life.strategy;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.孫夫人斷后,擋住追兵*/publicclassBlockEnemyimplementsIStrategy{publicvoidoperate(){第5頁(yè)您的設(shè)計(jì)模式System.out.println("孫夫人斷后,擋住追兵");}}好了,大家看看,計(jì)是有了,那需要有個(gè)地方放這些妙計(jì)呀,放錦囊呀:packagecom.cbf4life.strategy;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemy您的設(shè)計(jì)模式System.out.println("孫夫人斷后,擋住追兵");}}好了,大家看看,計(jì)是有了,那需要有個(gè)地方放這些妙計(jì)呀,放錦囊呀:packagecom.cbf4life.strategy;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*/publicclassContext{//構(gòu)造函數(shù),你要使用那個(gè)妙計(jì)privateIStrategystraegy;publicContext(IStrategystrategy){this.straegy=strategy;}//使用計(jì)謀了,看我出招了publicvoidoperate(){this.straegy.operate();}}然后就是雄赳赳的揣著三個(gè)錦囊,拉著已步入老年行列的、還想著娶純情少女的、色迷迷的爺子去入贅了,嗨,還別說(shuō),的計(jì)還真是不錯(cuò),瞅瞅:packagecom.cbf4life.strategy;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*/publicclassZhaoYun{/****/出場(chǎng)了,他根據(jù)給他的交代,依次拆開(kāi)妙計(jì)publicstaticvoidmain(String[]Contextcontext;args){第6頁(yè)您的設(shè)計(jì)模式//剛剛到吳國(guó)的時(shí)候拆第一個(gè)System.out.println("剛剛到吳國(guó)的時(shí)候拆第一個(gè) ");contextnewContext(newBackDoor())//拿到妙計(jì)context.operate();//拆開(kāi)執(zhí)行您的設(shè)計(jì)模式//剛剛到吳國(guó)的時(shí)候拆第一個(gè)System.out.println("剛剛到吳國(guó)的時(shí)候拆第一個(gè) ");contextnewContext(newBackDoor())//拿到妙計(jì)context.operate();//拆開(kāi)執(zhí)行//樂(lè)不思蜀了,拆第二個(gè)了System.out.println("樂(lè)不思蜀了,拆第二個(gè)了 ");context=newContext(newGivenGreenLight());context.operate();//執(zhí)行了第二個(gè)錦囊了//的小兵追了,咋辦?拆第三個(gè)System.out.println("");的小兵追了,咋辦?拆第三個(gè)context=newContext(newBlockEnemy());context.operate();//孫夫人退兵/**問(wèn)題來(lái)了:實(shí)際不知道是那個(gè)策略呀,他只知道拆第一個(gè)錦囊,*而不知道是BackDoor這個(gè)妙計(jì),咋辦?似乎這個(gè)策略模式已經(jīng)把計(jì)謀名稱寫出來(lái)了*third,沒(méi)人會(huì)說(shuō)你錯(cuò)!**/}}個(gè)不多說(shuō)了,領(lǐng)會(huì)吧。第7頁(yè)您的設(shè)計(jì)模式2章什么是模式呢?我很忙,忙的沒(méi)空理你,那你要找我呢就先找人吧,那人總要知道被人能做哪些事情不能做哪些事情吧,那就是兩個(gè)人具備同一個(gè)接口,人雖然不能干活,但是被的人能干活呀。比如西門慶找,那做,表現(xiàn)在時(shí)這樣的:先定義一種類型的女人:xy;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*定義一種類型的女人,*/和您的設(shè)計(jì)模式2章什么是模式呢?我很忙,忙的沒(méi)空理你,那你要找我呢就先找人吧,那人總要知道被人能做哪些事情不能做哪些事情吧,那就是兩個(gè)人具備同一個(gè)接口,人雖然不能干活,但是被的人能干活呀。比如西門慶找,那做,表現(xiàn)在時(shí)這樣的:先定義一種類型的女人:xy;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*定義一種類型的女人,*/和都屬于這個(gè)類型的女人publicinterfaceKindWomen{//這種類型的女人能做什么事情呢?publicvoidmakeEyesWithMan();//拋媚眼publicvoidhappyWithMan();//happywhat?Youknowthat!}一種類型嘛,那肯定是接口,然后定義:xy;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*定一個(gè)*/是什么樣的人publicclassPanJinLianimplementsKindWomen{publicvoidhappyWithMan(){System.out.println("}在和男人做那個(gè) ");第8頁(yè)您的設(shè)計(jì)模式publicvoidmakeEyesWithMan(){System.out.println("拋媚眼");}}再定一個(gè) 的:xy;/******@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewith您的設(shè)計(jì)模式publicvoidmakeEyesWithMan(){System.out.println("拋媚眼");}}再定一個(gè) 的:xy;/******@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.這個(gè)人,她太老了,是個(gè)男人都看不上,!*/publicclassWangPoimplementsKindWomen{privateKindWomenkindWomen;publicWangPo()//默認(rèn)的話,是的this.kindWomen=newPanJinLian();}//她可以是KindWomen的任何一個(gè)女人的,只要你是這一類型publicWangPo(KindWomenkindWomen){this.kindWomen=kindWomen;}publicvoidhappyWithMan(){this.kindWomen.happyWithMan();// 老了,干不了,可以讓年輕的代替}publicvoidmakeEyesWithMan(){this.kindWomen.makeEyesWithMan();//這么大了,誰(shuí)看她拋媚眼?!}}兩個(gè)女主角都上場(chǎng)了,男主角也該出現(xiàn)了:第9頁(yè)您的設(shè)計(jì)模式xy;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*定義一個(gè)西門慶,這*/中餓鬼publicclassXiMenQing{/**水滸里是這樣寫的:西門慶被*被就開(kāi)始撮合兩人好事,作為的人*收了不少好處費(fèi),那我們假設(shè)一下:*如果沒(méi)有您的設(shè)計(jì)模式xy;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*定義一個(gè)西門慶,這*/中餓鬼publicclassXiMenQing{/**水滸里是這樣寫的:西門慶被*被就開(kāi)始撮合兩人好事,作為的人*收了不少好處費(fèi),那我們假設(shè)一下:*如果沒(méi)有*/在中間牽線,這兩個(gè)不要臉的能成嗎?難說(shuō)的很!publicstaticvoidmain(String[]args){//把 叫出來(lái)WangPowangPo=newWangPo();//然后西門慶就說(shuō),我要和happy,然后戲:wangPo.makeEyesWithMan();//看到?jīng)],雖然表面上wangPo.happyWithMan();}}那這就是活生生的一個(gè)例子,通過(guò)人實(shí)現(xiàn)了某種目的,如果真去掉這個(gè)中間環(huán)節(jié),直接是西門慶和勾搭,估計(jì)很難成就武松殺嫂。那我們?cè)倏紤]一下,水滸里還有沒(méi)有這類型的女人?有,的老婆賈氏(就是和那個(gè)固管家茍合的那個(gè)做她的 :把賈氏素描出來(lái):xy;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*/publicclassJiaShiimplementsKindWomen{publicvoidhappyWithMan(){System.out.println("賈氏正在Happy中 ");第10頁(yè)您的設(shè)計(jì)模式}publicvoidmakeEyesWithMan(){System.out.println("賈氏拋媚眼");}}西門慶勾賈氏:xy;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledge您的設(shè)計(jì)模式}publicvoidmakeEyesWithMan(){System.out.println("賈氏拋媚眼");}}西門慶勾賈氏:xy;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*定義一個(gè)西門慶,這*/中餓鬼publicclassXiMenQing{publicstaticvoidmain(String[]args)//改編一下歷史,賈氏被西門慶勾走:JiaShijiaShinewJiaShi();{WangPowangPonewWangPo(jiaShi)//讓作為賈氏的 人wangPo.makeEyesWithMan();wangPo.happyWithMan();}}活,好,我交給幕后的類去類能不能干呢?同根就成,大家知根知底,你能做啥,我能做啥的很,同一個(gè)接口唄。第11頁(yè)您的設(shè)計(jì)模式3章這個(gè)模式是很有意思,而且比較簡(jiǎn)單,但是我還是要說(shuō)因?yàn)樗褂玫氖侨绱说膹V泛,如此的有人緣,單例就是單一、獨(dú)苗的意思,那什么是獨(dú)一份呢?你的思維是獨(dú)一份,除此之外還有什么不能山寨的呢?我們舉個(gè)比較難的對(duì)象:的歷史上很少出現(xiàn)兩個(gè)并存的時(shí)期,是有,但不多,那我們就認(rèn)為是個(gè)單例模式,在這的,的先看類圖:然后我們看程序?qū)崿F(xiàn),先定一個(gè):packagecom.cbf4life.singleton1;/******/@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledge您的設(shè)計(jì)模式3章這個(gè)模式是很有意思,而且比較簡(jiǎn)單,但是我還是要說(shuō)因?yàn)樗褂玫氖侨绱说膹V泛,如此的有人緣,單例就是單一、獨(dú)苗的意思,那什么是獨(dú)一份呢?你的思維是獨(dú)一份,除此之外還有什么不能山寨的呢?我們舉個(gè)比較難的對(duì)象:的歷史上很少出現(xiàn)兩個(gè)并存的時(shí)期,是有,但不多,那我們就認(rèn)為是個(gè)單例模式,在這的,的先看類圖:然后我們看程序?qū)崿F(xiàn),先定一個(gè):packagecom.cbf4life.singleton1;/******/@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.的歷史上都是一個(gè)朝代一個(gè),有兩個(gè) 的話,必然要PK出一個(gè)出來(lái)publicclassEmperor{privatestaticEmperoremperornull;//定義一個(gè)放在那里,然后給這個(gè)名字privateEmperor(){//世俗和道德約束你,目的就是不讓你產(chǎn)生第二個(gè)}publicstaticEmperorgetInstance(){第12頁(yè)您的設(shè)計(jì)模式if(emperor==null){//如果 還沒(méi)有定義,那就定一個(gè)emperor=newEmperor();}returnemperor;}// 叫什么名字呀publicstaticvoidemperorInfo(){System.out您的設(shè)計(jì)模式if(emperor==null){//如果 還沒(méi)有定義,那就定一個(gè)emperor=newEmperor();}returnemperor;}// 叫什么名字呀publicstaticvoidemperorInfo(){System.out.println("我就是某某某 ");}}然后定義大臣:packagecom.cbf4life.singleton1;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*大臣是天天要面見(jiàn)*/,見(jiàn)的@SuppressWarnings("all")publicclassMinister{/***@paramargs*/publicstaticvoidmain(String[]args){//第一天Emperoremperor1=Emperor.getInstance();emperor1.emperorInfo();//第一天見(jiàn)的叫什么名字呢?//第二天Emperoremperor2=Emperor.getInstance();Emperor.emperorInfo();//第三天Emperoremperor3=Emperor.getInstance();emperor2.emperorInfo();//三天見(jiàn)的都是同一個(gè)人,榮幸吧!}}第13頁(yè)您的設(shè)計(jì)模式看到?jīng)],大臣天天見(jiàn)到的都是同一個(gè),產(chǎn)生錯(cuò)亂情況,反正都是一個(gè),是好是壞就這一個(gè),只要提到,大家都知道指的是誰(shuí),清晰,而又明確。問(wèn)題是這是通常情況,還有個(gè)例的,如同一個(gè)時(shí)期同一個(gè)朝代有兩個(gè),怎么辦?單例模式很簡(jiǎn)單,就是在構(gòu)造函數(shù)中多了加一個(gè)構(gòu)造函數(shù),privateB/SHTTPRequestJ2EE的容器上后都創(chuàng)建了一個(gè)線程,每個(gè)線程都要?jiǎng)?chuàng)建同一個(gè)單例對(duì)象,怎么辦?,好,我們寫一個(gè)通用的單例程序,然后分析一下:packagecom.cbf4life.singleton3;/**@authorcbf4Lifecbf4life@126.comI'mglad您的設(shè)計(jì)模式看到?jīng)],大臣天天見(jiàn)到的都是同一個(gè),產(chǎn)生錯(cuò)亂情況,反正都是一個(gè),是好是壞就這一個(gè),只要提到,大家都知道指的是誰(shuí),清晰,而又明確。問(wèn)題是這是通常情況,還有個(gè)例的,如同一個(gè)時(shí)期同一個(gè)朝代有兩個(gè),怎么辦?單例模式很簡(jiǎn)單,就是在構(gòu)造函數(shù)中多了加一個(gè)構(gòu)造函數(shù),privateB/SHTTPRequestJ2EE的容器上后都創(chuàng)建了一個(gè)線程,每個(gè)線程都要?jiǎng)?chuàng)建同一個(gè)單例對(duì)象,怎么辦?,好,我們寫一個(gè)通用的單例程序,然后分析一下:packagecom.cbf4life.singleton3;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.通用單例模式*/publicclassSingletonPattern{privatestaticSingletonPatternsingletonPattern=null;//限制住不能直接產(chǎn)生一個(gè)實(shí)例privateSingletonPattern(){}publicSingletonPatterngetInstance(){){ this.singletonPattern=newSingletonPattern(); }returnthis.singletonPattern;}}ABAthis.singletonPatternnewSingletonPattern(0.0010.001Bif(this.singletonPattern==null),你說(shuō)這個(gè)時(shí)候這個(gè)條件是true還是false?是true,那然后呢?線程BSingletonPattern第14頁(yè)您的設(shè)計(jì)模式如果你這個(gè)單例是去拿一個(gè)序列號(hào)或者創(chuàng)建一個(gè)信號(hào)資源的時(shí)候,會(huì)怎么樣?業(yè)務(wù)邏輯混亂!數(shù)據(jù)一致性校驗(yàn)失??!最重要的是你從代碼上還看不出什么問(wèn)題,這最的!因?yàn)檫@種情況基本上你是重現(xiàn)不了的,不寒而栗吧,那怎么修改?有很多種方案,我就說(shuō)一種,能簡(jiǎn)單的、徹底解決問(wèn)題的方案:packagecom.cbf4life.singleton3;/**@authorcbf4Lifecbf4life@126.comI'm您的設(shè)計(jì)模式如果你這個(gè)單例是去拿一個(gè)序列號(hào)或者創(chuàng)建一個(gè)信號(hào)資源的時(shí)候,會(huì)怎么樣?業(yè)務(wù)邏輯混亂!數(shù)據(jù)一致性校驗(yàn)失??!最重要的是你從代碼上還看不出什么問(wèn)題,這最的!因?yàn)檫@種情況基本上你是重現(xiàn)不了的,不寒而栗吧,那怎么修改?有很多種方案,我就說(shuō)一種,能簡(jiǎn)單的、徹底解決問(wèn)題的方案:packagecom.cbf4life.singleton3;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.通用單例模式*/publicclassSingletonPattern{privatestaticfinalSingletonPatternsingletonPattern=newSingletonPattern();//限制住不能直接產(chǎn)生一個(gè)實(shí)例privateSingletonPattern(){}publicsynchronizedstaticSingletonPatterngetInstance(){returnsingletonPattern;}}newsingletonpattern,getInstance()直接返回給你,解決問(wèn)題!第15頁(yè)您的設(shè)計(jì)模式4章,期間的算不算,不算,各自,各有各的地盤,國(guó)號(hào)不同。大家還記得《石灰吟》嗎?作者是誰(shuí)?,他是被誰(shuí)殺死的?鎮(zhèn),對(duì),就是那個(gè)在土木堡之變中被瓦刺俘虜?shù)模环敽?,他弟弟鈺?dāng)上了,就是明景帝,估計(jì)當(dāng)上后樂(lè)瘋了,忘記把老哥 鎮(zhèn)削為太上皇了,我Shit,的歷2,你說(shuō)這期間的大臣多郁悶,兩個(gè)耶,兩個(gè)精神依附對(duì)象呀。(new一個(gè)對(duì)象沒(méi)啥差別,不討論)怎么實(shí)現(xiàn)呢,看我出招,先看類圖:然后看程序,先把兩個(gè)定義出來(lái):packagecom.cbf4life.singleton2;importjava.util.ArrayList;importjava.util.Random;/*******@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.您的設(shè)計(jì)模式4章,期間的算不算,不算,各自,各有各的地盤,國(guó)號(hào)不同。大家還記得《石灰吟》嗎?作者是誰(shuí)?,他是被誰(shuí)殺死的?鎮(zhèn),對(duì),就是那個(gè)在土木堡之變中被瓦刺俘虜?shù)?,被俘虜后,他弟弟鈺?dāng)上了,就是明景帝,估計(jì)當(dāng)上后樂(lè)瘋了,忘記把老哥 鎮(zhèn)削為太上皇了,我Shit,的歷2,你說(shuō)這期間的大臣多郁悶,兩個(gè)耶,兩個(gè)精神依附對(duì)象呀。(new一個(gè)對(duì)象沒(méi)啥差別,不討論)怎么實(shí)現(xiàn)呢,看我出招,先看類圖:然后看程序,先把兩個(gè)定義出來(lái):packagecom.cbf4life.singleton2;importjava.util.ArrayList;importjava.util.Random;/*******@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.的話,必然要PK出一個(gè)的歷史上都是一個(gè)朝代一個(gè) ,有兩個(gè)出來(lái)。問(wèn)題出來(lái)了:如果一個(gè)時(shí)間,出現(xiàn)了兩個(gè)怎么辦?比如土木堡之變后,被俘虜,明景帝即位,但是明景帝當(dāng)上!削為太上皇,*也就是在這一個(gè)多月的時(shí)間內(nèi),**/竟然有兩個(gè)第16頁(yè)您的設(shè)計(jì)模式@SuppressWarnings("all")publicclassEmperor{privatestaticintmaxNumOfEmperor2;//最多只能有連個(gè)叫什么名字//privatestaticArrayListemperorList=newArrayList(maxNumOfEmperor您的設(shè)計(jì)模式@SuppressWarnings("all")publicclassEmperor{privatestaticintmaxNumOfEmperor2;//最多只能有連個(gè)叫什么名字//privatestaticArrayListemperorList=newArrayList(maxNumOfEmperor);帝的列表;privatestaticintcountNumOfEmperor=0;//正在被人尊稱的是那個(gè)////先把2個(gè)static{//把所有的都產(chǎn)生出來(lái)for(inti=0;i<maxNumOfEmperor;i++){emperorList.add(newEmperor("皇"+(i+1)+"帝"));}}//就這么多了,不再推舉一個(gè)(new一個(gè))privateEmperor(){//世俗和道德約束你,目的就是不讓你產(chǎn)生第二個(gè)}privateEmperor(Stringinfo){emperorInfoList.add(info);}publicstaticEmperorgetInstance(){Randomrandom=newRandom();countNumOfEmperor=random.nextInt(maxNumOfEmperor);//隨機(jī)拉出一個(gè),只要是個(gè)精神就成return(Emperor)emperorList.get(countNumOfEmperor);}//叫什么名字呀publicstaticvoidemperorInfo(){}}那大臣是比較悲慘了,兩個(gè)呀,兩個(gè)老子呀,怎么拜呀,不管了,只要是個(gè)就成:packagecom.cbf4life.singleton2;第17頁(yè)您的設(shè)計(jì)模式/***@authorcbf4Lifecbf4life@126.comI'mgladtoshareTND,不管了,找到個(gè)*/myknowledgewith您的設(shè)計(jì)模式/***@authorcbf4Lifecbf4life@126.comI'mgladtoshareTND,不管了,找到個(gè)*/myknowledgewithyouall.,磕頭,請(qǐng)按就成了!@SuppressWarnings("all")publicclassMinister{/***@paramargs*/publicstaticvoidmain(String[]args){intministerNum=10//10個(gè)大臣for(inti=0;i<ministerNum;i++){Emperoremperor=Emperor.getInstance();System.out.print("第"+(i+1)+"個(gè)大臣emperor.emperorInfo();的是:");}}}那各位看官就可能會(huì)不屑了:有的大臣有骨氣,只拜一個(gè),你怎么處理?這個(gè)問(wèn)題太簡(jiǎn)單,第18頁(yè)您的設(shè)計(jì)模式5章工廠女?huà)z補(bǔ)天的故事大家都聽(tīng)說(shuō)過(guò)吧,不說(shuō)這個(gè),說(shuō)女?huà)z創(chuàng)造人的故事,可不是“造人”的工作,這個(gè)詞被現(xiàn)代人了。這個(gè)故事是說(shuō),女?huà)z在補(bǔ)了天后,下到凡間一看,,風(fēng)景,天空是藍(lán)的,清澈的,空氣是清新的,,然后就待時(shí)間長(zhǎng)了就有點(diǎn)寂寞了,沒(méi)有動(dòng)物,這些看的到都是靜態(tài)的東西呀,怎么辦?)開(kāi)始創(chuàng)建人,具體過(guò)程是這樣的:先是泥巴捏,然后放八卦爐里烤,再扔到地上成長(zhǎng),但是意外總是會(huì)產(chǎn)生的:~~,感覺(jué)應(yīng)該熟了,往地上一扔,biu~,一個(gè)白人誕生了,沒(méi)烤熟!第二次烤泥人,茲茲茲茲茲茲茲茲~~,上次都沒(méi)烤熟,這次多烤會(huì)兒,往地上一扔,嘿,熟過(guò)頭了,哪!~茲~茲~,一邊烤一邊,嘿,正正好,Perfect:RB不屬此列】(會(huì)加上去,之前的會(huì)一個(gè)一個(gè)的補(bǔ)充,目的是讓大家舒服,愉悅,就想要,就像是看小說(shuō)一樣,目標(biāo),目標(biāo)而已,能不能實(shí)現(xiàn)就看大家給)那這個(gè)過(guò)程我們就用表現(xiàn),首先定義一個(gè)人類的總稱:第19頁(yè)您的設(shè)計(jì)模式5章工廠女?huà)z補(bǔ)天的故事大家都聽(tīng)說(shuō)過(guò)吧,不說(shuō)這個(gè),說(shuō)女?huà)z創(chuàng)造人的故事,可不是“造人”的工作,這個(gè)詞被現(xiàn)代人了。這個(gè)故事是說(shuō),女?huà)z在補(bǔ)了天后,下到凡間一看,,風(fēng)景,天空是藍(lán)的,清澈的,空氣是清新的,,然后就待時(shí)間長(zhǎng)了就有點(diǎn)寂寞了,沒(méi)有動(dòng)物,這些看的到都是靜態(tài)的東西呀,怎么辦?)開(kāi)始創(chuàng)建人,具體過(guò)程是這樣的:先是泥巴捏,然后放八卦爐里烤,再扔到地上成長(zhǎng),但是意外總是會(huì)產(chǎn)生的:~~,感覺(jué)應(yīng)該熟了,往地上一扔,biu~,一個(gè)白人誕生了,沒(méi)烤熟!第二次烤泥人,茲茲茲茲茲茲茲茲~~,上次都沒(méi)烤熟,這次多烤會(huì)兒,往地上一扔,嘿,熟過(guò)頭了,哪!~茲~茲~,一邊烤一邊,嘿,正正好,Perfect:RB不屬此列】(會(huì)加上去,之前的會(huì)一個(gè)一個(gè)的補(bǔ)充,目的是讓大家舒服,愉悅,就想要,就像是看小說(shuō)一樣,目標(biāo),目標(biāo)而已,能不能實(shí)現(xiàn)就看大家給)那這個(gè)過(guò)程我們就用表現(xiàn),首先定義一個(gè)人類的總稱:第19頁(yè)您的設(shè)計(jì)模式packagecom.cbf4life;/***@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledge*/publicinterfaceHuman您的設(shè)計(jì)模式packagecom.cbf4life;/***@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledge*/publicinterfaceHuman{//首先定義什么是人類withyouall.//人是愉快的,會(huì)笑的,本來(lái)是想用spublicvoidlaugh();laugh更合適,好長(zhǎng)時(shí)間沒(méi)有大笑了;//人類還會(huì)哭,代表痛苦publicvoidcry();//人類會(huì)說(shuō)話publicvoidtalk();}然后定義具體的人種:packagecom.cbf4life;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*黃色人種,這個(gè)翻譯的*/確,將就點(diǎn)吧publicclassYellowHumanimplementsHuman{publicvoidcry(){黃色人種會(huì)哭");}publicvoidlaugh(){黃色人種會(huì)大笑,}呀!");publicvoidtalk(){System.out.println("黃色人種會(huì)說(shuō)話,說(shuō)的字節(jié)");第20頁(yè)您的設(shè)計(jì)模式}}白色人種:packagecom.cbf4life;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewith您的設(shè)計(jì)模式}}白色人種:packagecom.cbf4life;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.白色人種*/publicclassWhiteHumanimplementsHuman{publicvoidcry(){白色人種會(huì)哭");}publicvoidlaugh(){System.out.println("白色人種會(huì)大笑,侵略的笑聲");}publicvoidtalk(){白色人種會(huì)說(shuō)話,}都是但是單字節(jié)!");}黑色人種:packagecom.cbf4life;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.人的意思,不懂,沒(méi)跟老外說(shuō)話*黑色人種,記得*/英語(yǔ),說(shuō)blackman是publicclassBlackHumanimplementsHuman{publicvoidcry(){System.out.println("");第21頁(yè)您的設(shè)計(jì)模式}publicvoidlaugh(){}");publicvoidtalk(){System.out.println("可以說(shuō)話,人聽(tīng)不懂");}}人種也定義完畢了,那我們把八卦爐定義出來(lái):packagecom.cbf4life;importjava.util.List;importjava.util.Random;/*****您的設(shè)計(jì)模式}publicvoidlaugh(){}");publicvoidtalk(){System.out.println("可以說(shuō)話,人聽(tīng)不懂");}}人種也定義完畢了,那我們把八卦爐定義出來(lái):packagecom.cbf4life;importjava.util.List;importjava.util.Random;/*****@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.講女?huà)z造人的故事,這個(gè)故事梗概是這樣的:*很久很久以前,開(kāi)辟了天地,用身軀造出日月星辰、山川草木,天地一片繁華Oneday,女?huà)z下界走了一遭,哎!太寂寞,太孤獨(dú)了,沒(méi)個(gè)會(huì)笑的、會(huì)哭的、會(huì)說(shuō)話的東東(后來(lái)這個(gè)成了太白金星的寶貝)中烤,就有了人:*我們把這個(gè)生產(chǎn)人的過(guò)程用Java程序表現(xiàn)出來(lái):*/publicclassHumanFactory{//定一個(gè)烤箱,泥巴塞進(jìn)去,人就出來(lái),這個(gè)太先進(jìn)了publicstaticHumancreateHuman(Classc){Humanhuman=null;//定義一個(gè)類型的人類try{human=(Human)Class.forName(c.getName()).newInstance();//產(chǎn)生一個(gè)人種}catch(InstationExceptione//你要是不說(shuō)個(gè)人種顏色的話,沒(méi)法烤,要白的黑,你說(shuō)話了烤System.out.println("必須指定人種的顏色");...第22頁(yè)您的設(shè)計(jì)模式System.out.println("人種定義錯(cuò)誤!");catch(ClassNotFoundExceptione//你隨便說(shuō)個(gè)人種,我到哪里給你去?!System.out.println("混蛋,你指定的人種找不到!");}return您的設(shè)計(jì)模式System.out.println("人種定義錯(cuò)誤!");catch(ClassNotFoundExceptione//你隨便說(shuō)個(gè)人種,我到哪里給你去?!System.out.println("混蛋,你指定的人種找不到!");}returnhuman;}}然后我們?cè)侔雅畫(huà)z出來(lái):packagecom.cbf4life;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*/publicclassNvWa{publicstaticvoidmain(String[]args){//女?huà)z第一次造人,試驗(yàn)性質(zhì),,火候不足,缺陷System.out.println(" 造出的第一批人是這樣的:白人");HumanwhiteHuman=HumanFactory.createHuman(WhiteHuman.class);whiteHuman.cry();whiteHuman.laugh();whiteHuman.talk();//女?huà)z第二次造人,火候加足點(diǎn),然后又出了個(gè)次品,System.out.println("\n\n 的第二批人是這樣的:");HumanblackHuman=HumanFactory.createHuman(BlackHuman.class);blackHuman.cry();blackHuman.laugh();blackHuman.talk();//第三批人了,這次火候掌握的正好,黃色人種(不寫黃人,免得引起歧義),備注:RB人不屬于此列System.out.println("\n\n 造出的第三批人是這樣的:黃色人種");第23頁(yè)您的設(shè)計(jì)模式HumanyellowHuman=HumanFactory.createHuman(YellowHuman.class);yellowHuman.cry();yellowHuman.laugh();yellowHuman.talk()}}這樣就熱鬧起來(lái)了,人也有了,但是這樣創(chuàng)建太累了,神仙也會(huì)累的,那怎么辦?神仙就想了:我塞進(jìn)去一團(tuán)泥巴,隨機(jī)出來(lái)一群人,管他是、白人、黃人,只要是人就成(你看看,神仙都偷您的設(shè)計(jì)模式HumanyellowHuman=HumanFactory.createHuman(YellowHuman.class);yellowHuman.cry();yellowHuman.laugh();yellowHuman.talk()}}這樣就熱鬧起來(lái)了,人也有了,但是這樣創(chuàng)建太累了,神仙也會(huì)累的,那怎么辦?神仙就想了:我塞進(jìn)去一團(tuán)泥巴,隨機(jī)出來(lái)一群人,管他是、白人、黃人,只要是人就成(你看看,神仙都偷懶,何況是我們?nèi)薱reateHuman():packagecom.cbf4life;importjava.util.List;classHumanFactory{//定一個(gè)烤箱,泥巴塞進(jìn)去,人就出來(lái),這個(gè)太先進(jìn)了publicstaticHumancreateHuman(Classc){Humanhuman=null;//定義一個(gè)類型的人類第24頁(yè)您的設(shè)計(jì)模式try{human(Human)Class.forName(c.getName()).newInstance();//產(chǎn)生一個(gè)人種}catch(InstationExceptione//你要是不說(shuō)個(gè)人種顏色的話,沒(méi)法烤,要白的黑,你說(shuō)話了烤System.out.println("必須指定人種的顏色"您的設(shè)計(jì)模式try{human(Human)Class.forName(c.getName()).newInstance();//產(chǎn)生一個(gè)人種}catch(InstationExceptione//你要是不說(shuō)個(gè)人種顏色的話,沒(méi)法烤,要白的黑,你說(shuō)話了烤System.out.println("必須指定人種的顏色");...System.out.println("人種定義錯(cuò)誤!");catch(ClassNotFoundExceptione//你隨便說(shuō)個(gè)人種,我到哪里給你去?!System.out.println("混蛋,你指定的人種找不到!");}returnhuman;}//女?huà)z生氣了,把一團(tuán)泥巴塞到八卦爐,哎產(chǎn)生啥人種就啥人種publicstaticHumancreateHuman(){Humanhuman=null;//定義一個(gè)類型的人類List<ClassconcreteHumanListClassUtils.getAllClassByInterface(Human.class);//定義了多少人種//八卦爐Randomrandom=newRandom();intrand=random.nextInt(concreteHumanList.size());human=createHuman(concreteHumanList.get(rand));returnhuman;}}然后看女?huà)z是如何做的:packagecom.cbf4life;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*/第25頁(yè)您的設(shè)計(jì)模式publicclassNvWa{publicstaticvoidmain(String[]args){//女?huà)z第一次造人,試驗(yàn)性質(zhì),,火候不足,缺陷System.out.println(" 造出的第一批人是這樣的:白人您的設(shè)計(jì)模式publicclassNvWa{publicstaticvoidmain(String[]args){//女?huà)z第一次造人,試驗(yàn)性質(zhì),,火候不足,缺陷System.out.println(" 造出的第一批人是這樣的:白人");HumanwhiteHuman=HumanFactory.createHuman(WhiteHuman.class);whiteHuman.cry();whiteHuman.laugh();whiteHuman.talk();//女?huà)z第二次造人,火候加足點(diǎn),然后又出了個(gè)次品,System.out.println("\n\n 的第二批人是這樣的:");HumanblackHuman=HumanFactory.createHuman(BlackHuman.class);blackHuman.cry();blackHuman.laugh();blackHuman.talk();//第三批人了,這次火候掌握的正好,黃色人種(不寫黃人,免得引起歧義),備注:RB人不屬于此列System.out.println("\n\n 造出的第三批人是這樣的:黃色人種");HumanyellowHuman=HumanFactory.createHuman(YellowHuman.class);yellowHuman.cry();yellowHuman.laugh();yellowHuman.talk();//女?huà)z煩躁了,愛(ài)是啥人種就是啥人種,燒吧for(inti=0;i<;i++){System.out.println("\n\n隨機(jī)產(chǎn)生人種了 "+i);Humanhuman=HumanFactory.createHuman();human.cry();human.laugh();human.talk();}}}第26頁(yè)您的設(shè)計(jì)模式哇,packagecom.cbf4life;importjava.io.File;java.io.IOException;.URL;java.util.ArrayList;java.util.List;/***@author您的設(shè)計(jì)模式哇,packagecom.cbf4life;importjava.io.File;java.io.IOException;.URL;java.util.ArrayList;java.util.List;/***@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyou***/all.@SuppressWarnings("all")publicclassClassUtils{//給一個(gè)接口,返回這個(gè)接口的所有實(shí)現(xiàn)類publicstaticList<Class>getAllClassByInterface(Classc){List<ClassreturnClassListnewArrayList<Class>();//返回結(jié)果//如果不是一個(gè)接口,則不做處理if(c.isInterface()){StringpackageNamec.getPackage().getName();//獲得當(dāng)前的try{List<Class>allClassgetClasses(packageName);//獲得當(dāng)前包下以//是否是同一個(gè)接口for(inti=0;i<allClass.size();i++){if(c.isAssignableFrom(allClass.get(i))){// 是不是一個(gè)接口if(!c.equals(allClass.get(i))){//本身不加進(jìn)去returnClassList.add(allClass.get(i));}}}}catch(ClassNotFoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}第27頁(yè)您的設(shè)計(jì)模式}returnreturnClassList;}//從一個(gè)包中查找出所有的類,在jar包中不能查找privatestaticList<Class>您的設(shè)計(jì)模式}returnreturnClassList;}//從一個(gè)包中查找出所有的類,在jar包中不能查找privatestaticList<Class>getClasses(StringpackageName)throwsClassNotFoundException,IOException{ClassLoaderclassLoader=Th.currentTh ().getContextClassLoader();Stringpath=packageName.replace('.','/');Enumeration<URL>resources=classLoader.getResources(path);List<File>dirs=newArrayList<File>();while(resources.hasMoreElements()){URLresource=resources.nextElement();dirs.add(newFile(resource.getFile()));}ArrayList<Class>classes=newArrayList<Class>();for(Filedirectory:dirs){classes.addAll(findClasses(directory,packageName));}returnclasses;}privatestaticList<Class>findClasses(Filedirectory,StringthrowsClassNotFoundException{List<Class>classes=newArrayList<Class>();if(!directory.exists()){returnclasses;}File[]files=directory.listFiles();for(Filefile:files){if(file.isDirectory()){assert!file.getName().contains(".");classes.addAll(findClasses(file,packageName+"."+file.getName()));}elseif(file.getName().endsWith(".class")){classes.add(Class.forName(packageName+'.'+file.getName().substring(0,file.getName().length()-6)));}}returnclasses;}packageName)第28頁(yè)您的設(shè)計(jì)模式}以由父類查找到所有的子類,這個(gè)要修改一下,動(dòng)腦筋想下,簡(jiǎn)單的很!完整的類圖如下:Human了算,簡(jiǎn)單工廠模式就是這么簡(jiǎn)單,那我們?cè)僖胍粋€(gè)問(wèn)題:人是有的呀,有男有女,你這怎么沒(méi)區(qū)別,別急,這個(gè)且聽(tīng)下回分解!工廠模式還有一個(gè)非常重要的應(yīng)用,就是延遲始化(Lazyinitialization),什么是延遲始化呢?一個(gè)對(duì)象初始化完畢后就不,等到再次用到得就不用再次初始化了,直接從內(nèi)存過(guò)中拿到就可以了,怎么實(shí)現(xiàn)呢,很簡(jiǎn)單,看例子:packagecom.cbf4life.advance;import您的設(shè)計(jì)模式}以由父類查找到所有的子類,這個(gè)要修改一下,動(dòng)腦筋想下,簡(jiǎn)單的很!完整的類圖如下:Human了算,簡(jiǎn)單工廠模式就是這么簡(jiǎn)單,那我們?cè)僖胍粋€(gè)問(wèn)題:人是有的呀,有男有女,你這怎么沒(méi)區(qū)別,別急,這個(gè)且聽(tīng)下回分解!工廠模式還有一個(gè)非常重要的應(yīng)用,就是延遲始化(Lazyinitialization),什么是延遲始化呢?一個(gè)對(duì)象初始化完畢后就不,等到再次用到得就不用再次初始化了,直接從內(nèi)存過(guò)中拿到就可以了,怎么實(shí)現(xiàn)呢,很簡(jiǎn)單,看例子:packagecom.cbf4life.advance;importjava.util.HashMap;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*/@SuppressWarnings("all")publicclassHumanFactory{//定義一個(gè)MAP,初始化過(guò)的Human對(duì)象都放在這里第29頁(yè)您的設(shè)計(jì)模式privatestaticHashMap<String,Human>humans=newHashMap<String,Human>();//定一個(gè)烤箱,泥巴塞進(jìn)去,人就出來(lái),這個(gè)太先進(jìn)了publicstaticHumancreateHuman(Classc){您的設(shè)計(jì)模式privatestaticHashMap<String,Human>humans=newHashMap<String,Human>();//定一個(gè)烤箱,泥巴塞進(jìn)去,人就出來(lái),這個(gè)太先進(jìn)了publicstaticHumancreateHuman(Classc){;//定義一個(gè)類型的人類try{//如果MAP中有,則直接從取出,不用初始化了if(humans.containsKey(c.getSimpleName())){ human=humans.get(c.getSimpleName()); }else{ human=(Human)Class.forName(c.getName()).newInstance(); //放到MAP中 humans.put(c.getSimpleName(),human);}ationExceptione){//你要是不說(shuō)個(gè)人種顏色的話,沒(méi)法烤,要白的}catch(Inst黑,你說(shuō)話了烤System.out.println("必須指定人種的顏色");}catch(IllegalAccessExceptione){//一定定義的人種有問(wèn)題,那就烤不出來(lái)了,這是...System.out.println("人種定義錯(cuò)誤!");e//你隨便說(shuō)個(gè)人種,我到哪里給你去?!System.out.println("混蛋,你指定的人種找不到!");}returnhuman;}}很簡(jiǎn)單,就加上了黃色那部分的代碼,這個(gè)在類初始化很消耗資源的情況比較實(shí)用,比如你要連接硬減少項(xiàng)目的復(fù)雜程度。第30頁(yè)您的設(shè)計(jì)模式6章好了,我們繼一節(jié)課,講到女?huà)z造人,人是造出來(lái)了,世界時(shí)熱鬧了,低頭一看,都是清的類型,缺少關(guān)愛(ài)、、喜怒哀樂(lè)等情緒,人類的生命太平淡了,女?huà)z,猛然一拍腦袋,Shit!忘記給人類定義了,那怎么辦?抹掉重來(lái),然后就把人類重新洗牌,準(zhǔn)備重新開(kāi)始 人類。怎么改吧,好,有了,給每個(gè)人類都加一個(gè),然后再重新,這個(gè)問(wèn)題解決了,那八卦爐怎么辦?只有一個(gè)呀,要么生產(chǎn)出全性,要不都是女性,那不行呀,有了,把已經(jīng)有了一條生產(chǎn)線——八卦Factory)拆開(kāi),個(gè),并且略加修改,就成了女性八卦爐(只生產(chǎn)女性,一個(gè)具體工廠的實(shí)現(xiàn)類)和男性八卦爐(只生產(chǎn)男性,又一個(gè)具體工廠的實(shí)現(xiàn)類先看人類(也就是)的類圖:其中三個(gè)抽象類在抽象工廠模式中是叫做等級(jí),六個(gè)實(shí)現(xiàn)類是叫做族,這個(gè)也比較好理解,實(shí)現(xiàn)類嘛是真實(shí)的,一個(gè)叫,多了就叫族,然后再看工廠類:第31頁(yè)您的設(shè)計(jì)模式6章好了,我們繼一節(jié)課,講到女?huà)z造人,人是造出來(lái)了,世界時(shí)熱鬧了,低頭一看,都是清的類型,缺少關(guān)愛(ài)、、喜怒哀樂(lè)等情緒,人類的生命太平淡了,女?huà)z,猛然一拍腦袋,Shit!忘記給人類定義了,那怎么辦?抹掉重來(lái),然后就把人類重新洗牌,準(zhǔn)備重新開(kāi)始 人類。怎么改吧,好,有了,給每個(gè)人類都加一個(gè),然后再重新,這個(gè)問(wèn)題解決了,那八卦爐怎么辦?只有一個(gè)呀,要么生產(chǎn)出全性,要不都是女性,那不行呀,有了,把已經(jīng)有了一條生產(chǎn)線——八卦Factory)拆開(kāi),個(gè),并且略加修改,就成了女性八卦爐(只生產(chǎn)女性,一個(gè)具體工廠的實(shí)現(xiàn)類)和男性八卦爐(只生產(chǎn)男性,又一個(gè)具體工廠的實(shí)現(xiàn)類先看人類(也就是)的類圖:其中三個(gè)抽象類在抽象工廠模式中是叫做等級(jí),六個(gè)實(shí)現(xiàn)類是叫做族,這個(gè)也比較好理解,實(shí)現(xiàn)類嘛是真實(shí)的,一個(gè)叫,多了就叫族,然后再看工廠類:第31頁(yè)您的設(shè)計(jì)模式createHuman,目的是簡(jiǎn)化實(shí)現(xiàn)類的代碼工作量,這個(gè)在講代碼的時(shí)候會(huì)說(shuō)。這里還使用了Jdk1.5的一個(gè)新特性Enum類型,其實(shí)這個(gè)完全可以類的靜態(tài)變量來(lái)實(shí)現(xiàn),但我的知識(shí)點(diǎn)吧,我希望給大家講解,每次的提出來(lái),每個(gè)人都會(huì)有一點(diǎn)的收獲就足夠了,然后在具體的項(xiàng)目中使用時(shí),知道有這個(gè)baidu續(xù)類圖,完整的類圖如下,這個(gè)看不大清楚,其實(shí)就是上面那兩個(gè)類圖加起來(lái),大家可以看源碼中的那個(gè)您的設(shè)計(jì)模式createHuman,目的是簡(jiǎn)化實(shí)現(xiàn)類的代碼工作量,這個(gè)在講代碼的時(shí)候會(huì)說(shuō)。這里還使用了Jdk1.5的一個(gè)新特性Enum類型,其實(shí)這個(gè)完全可以類的靜態(tài)變量來(lái)實(shí)現(xiàn),但我的知識(shí)點(diǎn)吧,我希望給大家講解,每次的提出來(lái),每個(gè)人都會(huì)有一點(diǎn)的收獲就足夠了,然后在具體的項(xiàng)目中使用時(shí),知道有這個(gè)baidu續(xù)類圖,完整的類圖如下,這個(gè)看不大清楚,其實(shí)就是上面那兩個(gè)類圖加起來(lái),大家可以看源碼中的那個(gè)類圖文件:然后類圖講解完畢,我們來(lái)看程序?qū)崿F(xiàn):第32頁(yè)您的設(shè)計(jì)模式packagecom.cbf4life;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.定義一個(gè)人類的統(tǒng)稱,問(wèn)題出來(lái)了,剛剛定義的時(shí)候忘記定義 了*這個(gè)重要的問(wèn)題非修改不可,否則*/publicinterface您的設(shè)計(jì)模式packagecom.cbf4life;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.定義一個(gè)人類的統(tǒng)稱,問(wèn)題出來(lái)了,剛剛定義的時(shí)候忘記定義 了*這個(gè)重要的問(wèn)題非修改不可,否則*/publicinterfaceHuman{//首先定義什么是人類上太多太多的東西不了//人是愉快的,會(huì)笑的,本來(lái)是想用spublicvoidlaugh();laugh更合適,好長(zhǎng)時(shí)間沒(méi)有大笑了;//人類還會(huì)哭,代表痛苦publicvoidcry();//人類會(huì)說(shuō)話publicvoidtalk();//定義publicvoidsex();}crytalk()三個(gè),以AbstractYellowHuman為例:packagecom.cbf4life.yellowHuman;importcom.cbf4life.Human;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*為什么要修改成抽象類呢?要定義*/呀publicabstractclassAbstractYellowHumanimplementsHuman{publicvoidcry(){黃色人種會(huì)哭");}第33頁(yè)您的設(shè)計(jì)模式publicvoidlaugh(){黃色人種會(huì)大笑,}呀!");publicvoidtalk(){System.out.println("黃色人種會(huì)說(shuō)話,說(shuō)的字節(jié)"您的設(shè)計(jì)模式publicvoidlaugh(){黃色人種會(huì)大笑,}呀!");publicvoidtalk(){System.out.println("黃色人種會(huì)說(shuō)話,說(shuō)的字節(jié)");}}代碼,大家可以看一下源代碼。算了,還是拷貝,反正是 Eclipse白種人的抽象類:packagecom.cbf4life.whiteHuman;importcom.cbf4life.Human;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.白色人人種*/publicabstractclassAbstractWhiteHumanimplementsHuman{publicvoidcry(){System.out.println("白色人種會(huì)哭");}publicvoidlaugh(){System.out.println("白色人種會(huì)大笑,侵略的笑聲");}第34頁(yè)您的設(shè)計(jì)模式publicvoidtalk(){System.out.println("白色人種會(huì)說(shuō)話,都是但是單字節(jié)!");}}黑種人的抽象類:packagecom.cbf4life.blackHuman;importcom.cbf4life.Human;/**@authorcbf4Lifecbf4life@126.comI'mgladtoshare您的設(shè)計(jì)模式publicvoidtalk(){System.out.println("白色人種會(huì)說(shuō)話,都是但是單字節(jié)!");}}黑種人的抽象類:packagecom.cbf4life.blackHuman;importcom.cbf4life.Human;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.人的意思,不懂,沒(méi)跟老外說(shuō)話*黑色人種,記得*/英語(yǔ),說(shuō)blackman是publicabstractclassAbstractBlackHumanimplementsHuman{publicvoidcry(){}");publicvoidlaugh(){}");publicvoidtalk(){System.out.println("可以說(shuō)話,人聽(tīng)不懂");}}三個(gè)抽象類都實(shí)現(xiàn)完畢了,然后就是些實(shí)現(xiàn)類了。其實(shí),你說(shuō)抽象類放這里有什么意義嗎?就是不允new女性黃種人的實(shí)現(xiàn)類:packagecom.cbf4life.yellowHuman;第35頁(yè)您的設(shè)計(jì)模式/**@authorcbf4
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 庫(kù)存轉(zhuǎn)讓協(xié)議合同
- 家人代簽協(xié)議書(shū)
- 戰(zhàn)爭(zhēng)協(xié)議書(shū)模板
- 營(yíng)員安全協(xié)議書(shū)
- 薪酬補(bǔ)貼協(xié)議書(shū)
- 蝎子合伙協(xié)議書(shū)
- 蝦塘投資協(xié)議書(shū)
- 自來(lái)水借用協(xié)議書(shū)
- 自行協(xié)議協(xié)議書(shū)
- 展會(huì)合作協(xié)議書(shū)
- 2025年吉林省直機(jī)關(guān)公開(kāi)遴選公務(wù)員筆試題參考解析
- 科研項(xiàng)目財(cái)務(wù)專項(xiàng)審計(jì)方案模板
- 退伍留疆考試題庫(kù)及答案
- 數(shù)據(jù)倫理保護(hù)機(jī)制-洞察及研究
- 2025年鋼貿(mào)行業(yè)市場(chǎng)分析現(xiàn)狀
- 2025數(shù)字孿生與智能算法白皮書(shū)
- 鄉(xiāng)村醫(yī)生藥品管理培訓(xùn)
- 2025春季學(xué)期國(guó)開(kāi)電大??啤豆芾韺W(xué)基礎(chǔ)》一平臺(tái)在線形考(形考任務(wù)一至四)試題及答案
- 財(cái)務(wù)保密意識(shí)培訓(xùn)
- 辦公室裝修改造工程合同書(shū)
- 教師節(jié)學(xué)術(shù)交流活動(dòng)策劃方案
評(píng)論
0/150
提交評(píng)論