24種設(shè)計(jì)模式介紹與6大設(shè)計(jì)原則_第1頁
24種設(shè)計(jì)模式介紹與6大設(shè)計(jì)原則_第2頁
24種設(shè)計(jì)模式介紹與6大設(shè)計(jì)原則_第3頁
24種設(shè)計(jì)模式介紹與6大設(shè)計(jì)原則_第4頁
24種設(shè)計(jì)模式介紹與6大設(shè)計(jì)原則_第5頁
已閱讀5頁,還剩331頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

您的設(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ài)模式【STATEPATTERN】 23619第章原型模式【PROTOTYPEPATTERN】 25520第章中介者模式【MEDIATORPATTERN】 26821第章解釋器模式【INTERPRETERPATTERN】 28622第章亨元模式【FLYWEIGHTPATTERN】 28723第章備忘錄模式【MEMENTOPATTERN】 28824第章模式大PK 28925第章六大設(shè)計(jì)原則 29026單一職責(zé)原則【SINGLERESPONSIBILITYPRINCIPLE】 290里氏替換原則【LISKOVSUBSTITUTIONPRINCIPLE】 297第2頁您的設(shè)計(jì)模式依賴倒置原則【DEPENDENCEINVERSIONPRINCIPLE】 309接口 原則【INTERFACESEGREGATIONPRINCIPLE】 310法則【您的設(shè)計(jì)模式依賴倒置原則【DEPENDENCEINVERSIONPRINCIPLE】 309接口 原則【INTERFACESEGREGATIONPRINCIPLE】 310法則【LOWOFDEMETER】 32026.526.6 開閉原則【OPENPRINCIPLE】 330第27章混編模式講解 332第28章更新:334相關(guān)說明 335相關(guān)說明 335第29章后序 336第3頁您的設(shè)計(jì)模式1章給(伴郎)三個(gè)錦囊妙計(jì),說是按拆開解決棘手問題,嘿,還別說,真是解決了大問題,搞到最后是了夫人又折兵呀,那咱們先看看這個(gè)場景是什么樣子的。先說這個(gè)場景中的要素:計(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ì),說是按拆開解決棘手問題,嘿,還別說,真是解決了大問題,搞到最后是了夫人又折兵呀,那咱們先看看這個(gè)場景是什么樣子的。先說這個(gè)場景中的要素:計(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頁您的設(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.*求*/開個(gè)綠燈publicclassGivenGreenLightimplementsIStrategy{publicvoidoperate(){求}開個(gè)綠燈,放行!");}packagecom.cbf4life.strategy;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.孫夫人斷后,擋住追兵*/publicclassBlockEnemyimplementsIStrategy{publicvoidoperate(){第5頁您的設(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è)錦囊,拉著已步入老年行列的、還想著娶純情少女的、色迷迷的爺子去入贅了,嗨,還別說,的計(jì)還真是不錯(cuò),瞅瞅:packagecom.cbf4life.strategy;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*/publicclassZhaoYun{/****/出場了,他根據(jù)給他的交代,依次拆開妙計(jì)publicstaticvoidmain(String[]Contextcontext;args){第6頁您的設(shè)計(jì)模式//剛剛到吳國的時(shí)候拆第一個(gè)System.out.println("剛剛到吳國的時(shí)候拆第一個(gè) ");contextnewContext(newBackDoor())//拿到妙計(jì)context.operate();//拆開執(zhí)行您的設(shè)計(jì)模式//剛剛到吳國的時(shí)候拆第一個(gè)System.out.println("剛剛到吳國的時(shí)候拆第一個(gè) ");contextnewContext(newBackDoor())//拿到妙計(jì)context.operate();//拆開執(zhí)行//樂不思蜀了,拆第二個(gè)了System.out.println("樂不思蜀了,拆第二個(gè)了 ");context=newContext(newGivenGreenLight());context.operate();//執(zhí)行了第二個(gè)錦囊了//的小兵追了,咋辦?拆第三個(gè)System.out.println("");的小兵追了,咋辦?拆第三個(gè)context=newContext(newBlockEnemy());context.operate();//孫夫人退兵/**問題來了:實(shí)際不知道是那個(gè)策略呀,他只知道拆第一個(gè)錦囊,*而不知道是BackDoor這個(gè)妙計(jì),咋辦?似乎這個(gè)策略模式已經(jīng)把計(jì)謀名稱寫出來了*third,沒人會(huì)說你錯(cuò)!**/}}個(gè)不多說了,領(lǐng)會(huì)吧。第7頁您的設(shè)計(jì)模式2章什么是模式呢?我很忙,忙的沒空理你,那你要找我呢就先找人吧,那人總要知道被人能做哪些事情不能做哪些事情吧,那就是兩個(gè)人具備同一個(gè)接口,人雖然不能干活,但是被的人能干活呀。比如西門慶找,那做,表現(xiàn)在時(shí)這樣的:先定義一種類型的女人:xy;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*定義一種類型的女人,*/和您的設(shè)計(jì)模式2章什么是模式呢?我很忙,忙的沒空理你,那你要找我呢就先找人吧,那人總要知道被人能做哪些事情不能做哪些事情吧,那就是兩個(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頁您的設(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();//這么大了,誰看她拋媚眼?!}}兩個(gè)女主角都上場了,男主角也該出現(xiàn)了:第9頁您的設(shè)計(jì)模式xy;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*定義一個(gè)西門慶,這*/中餓鬼publicclassXiMenQing{/**水滸里是這樣寫的:西門慶被*被就開始撮合兩人好事,作為的人*收了不少好處費(fèi),那我們假設(shè)一下:*如果沒有您的設(shè)計(jì)模式xy;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*定義一個(gè)西門慶,這*/中餓鬼publicclassXiMenQing{/**水滸里是這樣寫的:西門慶被*被就開始撮合兩人好事,作為的人*收了不少好處費(fèi),那我們假設(shè)一下:*如果沒有*/在中間牽線,這兩個(gè)不要臉的能成嗎?難說的很!publicstaticvoidmain(String[]args){//把 叫出來WangPowangPo=newWangPo();//然后西門慶就說,我要和happy,然后戲:wangPo.makeEyesWithMan();//看到?jīng)],雖然表面上wangPo.happyWithMan();}}那這就是活生生的一個(gè)例子,通過人實(shí)現(xiàn)了某種目的,如果真去掉這個(gè)中間環(huán)節(jié),直接是西門慶和勾搭,估計(jì)很難成就武松殺嫂。那我們再考慮一下,水滸里還有沒有這類型的女人?有,的老婆賈氏(就是和那個(gè)固管家茍合的那個(gè)做她的 :把賈氏素描出來:xy;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*/publicclassJiaShiimplementsKindWomen{publicvoidhappyWithMan(){System.out.println("賈氏正在Happy中 ");第10頁您的設(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頁您的設(shè)計(jì)模式3章這個(gè)模式是很有意思,而且比較簡單,但是我還是要說因?yàn)樗褂玫氖侨绱说膹V泛,如此的有人緣,單例就是單一、獨(dú)苗的意思,那什么是獨(dú)一份呢?你的思維是獨(dú)一份,除此之外還有什么不能山寨的呢?我們舉個(gè)比較難的對象:的歷史上很少出現(xiàn)兩個(gè)并存的時(shí)期,是有,但不多,那我們就認(rèn)為是個(gè)單例模式,在這的,的先看類圖:然后我們看程序?qū)崿F(xiàn),先定一個(gè):packagecom.cbf4life.singleton1;/******/@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledge您的設(shè)計(jì)模式3章這個(gè)模式是很有意思,而且比較簡單,但是我還是要說因?yàn)樗褂玫氖侨绱说膹V泛,如此的有人緣,單例就是單一、獨(dú)苗的意思,那什么是獨(dú)一份呢?你的思維是獨(dú)一份,除此之外還有什么不能山寨的呢?我們舉個(gè)比較難的對象:的歷史上很少出現(xiàn)兩個(gè)并存的時(shí)期,是有,但不多,那我們就認(rèn)為是個(gè)單例模式,在這的,的先看類圖:然后我們看程序?qū)崿F(xiàn),先定一個(gè):packagecom.cbf4life.singleton1;/******/@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.的歷史上都是一個(gè)朝代一個(gè),有兩個(gè) 的話,必然要PK出一個(gè)出來publicclassEmperor{privatestaticEmperoremperornull;//定義一個(gè)放在那里,然后給這個(gè)名字privateEmperor(){//世俗和道德約束你,目的就是不讓你產(chǎn)生第二個(gè)}publicstaticEmperorgetInstance(){第12頁您的設(shè)計(jì)模式if(emperor==null){//如果 還沒有定義,那就定一個(gè)emperor=newEmperor();}returnemperor;}// 叫什么名字呀publicstaticvoidemperorInfo(){System.out您的設(shè)計(jì)模式if(emperor==null){//如果 還沒有定義,那就定一個(gè)emperor=newEmperor();}returnemperor;}// 叫什么名字呀publicstaticvoidemperorInfo(){System.out.println("我就是某某某 ");}}然后定義大臣:packagecom.cbf4life.singleton1;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*大臣是天天要面見*/,見的@SuppressWarnings("all")publicclassMinister{/***@paramargs*/publicstaticvoidmain(String[]args){//第一天Emperoremperor1=Emperor.getInstance();emperor1.emperorInfo();//第一天見的叫什么名字呢?//第二天Emperoremperor2=Emperor.getInstance();Emperor.emperorInfo();//第三天Emperoremperor3=Emperor.getInstance();emperor2.emperorInfo();//三天見的都是同一個(gè)人,榮幸吧!}}第13頁您的設(shè)計(jì)模式看到?jīng)],大臣天天見到的都是同一個(gè),產(chǎn)生錯(cuò)亂情況,反正都是一個(gè),是好是壞就這一個(gè),只要提到,大家都知道指的是誰,清晰,而又明確。問題是這是通常情況,還有個(gè)例的,如同一個(gè)時(shí)期同一個(gè)朝代有兩個(gè),怎么辦?單例模式很簡單,就是在構(gòu)造函數(shù)中多了加一個(gè)構(gòu)造函數(shù),privateB/SHTTPRequestJ2EE的容器上后都創(chuàng)建了一個(gè)線程,每個(gè)線程都要?jiǎng)?chuàng)建同一個(gè)單例對象,怎么辦?,好,我們寫一個(gè)通用的單例程序,然后分析一下:packagecom.cbf4life.singleton3;/**@authorcbf4Lifecbf4life@126.comI'mglad您的設(shè)計(jì)模式看到?jīng)],大臣天天見到的都是同一個(gè),產(chǎn)生錯(cuò)亂情況,反正都是一個(gè),是好是壞就這一個(gè),只要提到,大家都知道指的是誰,清晰,而又明確。問題是這是通常情況,還有個(gè)例的,如同一個(gè)時(shí)期同一個(gè)朝代有兩個(gè),怎么辦?單例模式很簡單,就是在構(gòu)造函數(shù)中多了加一個(gè)構(gòu)造函數(shù),privateB/SHTTPRequestJ2EE的容器上后都創(chuàng)建了一個(gè)線程,每個(gè)線程都要?jiǎng)?chuàng)建同一個(gè)單例對象,怎么辦?,好,我們寫一個(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),你說這個(gè)時(shí)候這個(gè)條件是true還是false?是true,那然后呢?線程BSingletonPattern第14頁您的設(shè)計(jì)模式如果你這個(gè)單例是去拿一個(gè)序列號或者創(chuàng)建一個(gè)信號資源的時(shí)候,會(huì)怎么樣?業(yè)務(wù)邏輯混亂!數(shù)據(jù)一致性校驗(yàn)失敗!最重要的是你從代碼上還看不出什么問題,這最的!因?yàn)檫@種情況基本上你是重現(xiàn)不了的,不寒而栗吧,那怎么修改?有很多種方案,我就說一種,能簡單的、徹底解決問題的方案:packagecom.cbf4life.singleton3;/**@authorcbf4Lifecbf4life@126.comI'm您的設(shè)計(jì)模式如果你這個(gè)單例是去拿一個(gè)序列號或者創(chuàng)建一個(gè)信號資源的時(shí)候,會(huì)怎么樣?業(yè)務(wù)邏輯混亂!數(shù)據(jù)一致性校驗(yàn)失??!最重要的是你從代碼上還看不出什么問題,這最的!因?yàn)檫@種情況基本上你是重現(xiàn)不了的,不寒而栗吧,那怎么修改?有很多種方案,我就說一種,能簡單的、徹底解決問題的方案:packagecom.cbf4life.singleton3;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.通用單例模式*/publicclassSingletonPattern{privatestaticfinalSingletonPatternsingletonPattern=newSingletonPattern();//限制住不能直接產(chǎn)生一個(gè)實(shí)例privateSingletonPattern(){}publicsynchronizedstaticSingletonPatterngetInstance(){returnsingletonPattern;}}newsingletonpattern,getInstance()直接返回給你,解決問題!第15頁您的設(shè)計(jì)模式4章,期間的算不算,不算,各自,各有各的地盤,國號不同。大家還記得《石灰吟》嗎?作者是誰?,他是被誰殺死的?鎮(zhèn),對,就是那個(gè)在土木堡之變中被瓦刺俘虜?shù)?,被俘虜后,他弟弟鈺?dāng)上了,就是明景帝,估計(jì)當(dāng)上后樂瘋了,忘記把老哥 鎮(zhèn)削為太上皇了,我Shit,的歷2,你說這期間的大臣多郁悶,兩個(gè)耶,兩個(gè)精神依附對象呀。(new一個(gè)對象沒啥差別,不討論)怎么實(shí)現(xiàn)呢,看我出招,先看類圖:然后看程序,先把兩個(gè)定義出來:packagecom.cbf4life.singleton2;importjava.util.ArrayList;importjava.util.Random;/*******@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.您的設(shè)計(jì)模式4章,期間的算不算,不算,各自,各有各的地盤,國號不同。大家還記得《石灰吟》嗎?作者是誰?,他是被誰殺死的?鎮(zhèn),對,就是那個(gè)在土木堡之變中被瓦刺俘虜?shù)?,被俘虜后,他弟弟鈺?dāng)上了,就是明景帝,估計(jì)當(dāng)上后樂瘋了,忘記把老哥 鎮(zhèn)削為太上皇了,我Shit,的歷2,你說這期間的大臣多郁悶,兩個(gè)耶,兩個(gè)精神依附對象呀。(new一個(gè)對象沒啥差別,不討論)怎么實(shí)現(xiàn)呢,看我出招,先看類圖:然后看程序,先把兩個(gè)定義出來:packagecom.cbf4life.singleton2;importjava.util.ArrayList;importjava.util.Random;/*******@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.的話,必然要PK出一個(gè)的歷史上都是一個(gè)朝代一個(gè) ,有兩個(gè)出來。問題出來了:如果一個(gè)時(shí)間,出現(xiàn)了兩個(gè)怎么辦?比如土木堡之變后,被俘虜,明景帝即位,但是明景帝當(dāng)上!削為太上皇,*也就是在這一個(gè)多月的時(shí)間內(nèi),**/竟然有兩個(gè)第16頁您的設(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)生出來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頁您的設(shè)計(jì)模式/***@authorcbf4Lifecbf4life@126.comI'mgladtoshareTND,不管了,找到個(gè)*/myknowledgewith您的設(shè)計(jì)模式/***@authorcbf4Lifecbf4life@126.comI'mgladtoshareTND,不管了,找到個(gè)*/myknowledgewithyouall.,磕頭,請按就成了!@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è)問題太簡單,第18頁您的設(shè)計(jì)模式5章工廠女媧補(bǔ)天的故事大家都聽說過吧,不說這個(gè),說女媧創(chuàng)造人的故事,可不是“造人”的工作,這個(gè)詞被現(xiàn)代人了。這個(gè)故事是說,女媧在補(bǔ)了天后,下到凡間一看,,風(fēng)景,天空是藍(lán)的,清澈的,空氣是清新的,,然后就待時(shí)間長了就有點(diǎn)寂寞了,沒有動(dòng)物,這些看的到都是靜態(tài)的東西呀,怎么辦?)開始創(chuàng)建人,具體過程是這樣的:先是泥巴捏,然后放八卦爐里烤,再扔到地上成長,但是意外總是會(huì)產(chǎn)生的:~~,感覺應(yīng)該熟了,往地上一扔,biu~,一個(gè)白人誕生了,沒烤熟!第二次烤泥人,茲茲茲茲茲茲茲茲~~,上次都沒烤熟,這次多烤會(huì)兒,往地上一扔,嘿,熟過頭了,哪!~茲~茲~,一邊烤一邊,嘿,正正好,Perfect:RB不屬此列】(會(huì)加上去,之前的會(huì)一個(gè)一個(gè)的補(bǔ)充,目的是讓大家舒服,愉悅,就想要,就像是看小說一樣,目標(biāo),目標(biāo)而已,能不能實(shí)現(xiàn)就看大家給)那這個(gè)過程我們就用表現(xiàn),首先定義一個(gè)人類的總稱:第19頁您的設(shè)計(jì)模式5章工廠女媧補(bǔ)天的故事大家都聽說過吧,不說這個(gè),說女媧創(chuàng)造人的故事,可不是“造人”的工作,這個(gè)詞被現(xiàn)代人了。這個(gè)故事是說,女媧在補(bǔ)了天后,下到凡間一看,,風(fēng)景,天空是藍(lán)的,清澈的,空氣是清新的,,然后就待時(shí)間長了就有點(diǎn)寂寞了,沒有動(dòng)物,這些看的到都是靜態(tài)的東西呀,怎么辦?)開始創(chuàng)建人,具體過程是這樣的:先是泥巴捏,然后放八卦爐里烤,再扔到地上成長,但是意外總是會(huì)產(chǎn)生的:~~,感覺應(yīng)該熟了,往地上一扔,biu~,一個(gè)白人誕生了,沒烤熟!第二次烤泥人,茲茲茲茲茲茲茲茲~~,上次都沒烤熟,這次多烤會(huì)兒,往地上一扔,嘿,熟過頭了,哪!~茲~茲~,一邊烤一邊,嘿,正正好,Perfect:RB不屬此列】(會(huì)加上去,之前的會(huì)一個(gè)一個(gè)的補(bǔ)充,目的是讓大家舒服,愉悅,就想要,就像是看小說一樣,目標(biāo),目標(biāo)而已,能不能實(shí)現(xiàn)就看大家給)那這個(gè)過程我們就用表現(xiàn),首先定義一個(gè)人類的總稱:第19頁您的設(shè)計(jì)模式packagecom.cbf4life;/***@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledge*/publicinterfaceHuman您的設(shè)計(jì)模式packagecom.cbf4life;/***@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledge*/publicinterfaceHuman{//首先定義什么是人類withyouall.//人是愉快的,會(huì)笑的,本來是想用spublicvoidlaugh();laugh更合適,好長時(shí)間沒有大笑了;//人類還會(huì)哭,代表痛苦publicvoidcry();//人類會(huì)說話publicvoidtalk();}然后定義具體的人種:packagecom.cbf4life;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*黃色人種,這個(gè)翻譯的*/確,將就點(diǎn)吧publicclassYellowHumanimplementsHuman{publicvoidcry(){黃色人種會(huì)哭");}publicvoidlaugh(){黃色人種會(huì)大笑,}呀!");publicvoidtalk(){System.out.println("黃色人種會(huì)說話,說的字節(jié)");第20頁您的設(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ì)說話,}都是但是單字節(jié)!");}黑色人種:packagecom.cbf4life;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.人的意思,不懂,沒跟老外說話*黑色人種,記得*/英語,說blackman是publicclassBlackHumanimplementsHuman{publicvoidcry(){System.out.println("");第21頁您的設(shè)計(jì)模式}publicvoidlaugh(){}");publicvoidtalk(){System.out.println("可以說話,人聽不懂");}}人種也定義完畢了,那我們把八卦爐定義出來:packagecom.cbf4life;importjava.util.List;importjava.util.Random;/*****您的設(shè)計(jì)模式}publicvoidlaugh(){}");publicvoidtalk(){System.out.println("可以說話,人聽不懂");}}人種也定義完畢了,那我們把八卦爐定義出來:packagecom.cbf4life;importjava.util.List;importjava.util.Random;/*****@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.講女媧造人的故事,這個(gè)故事梗概是這樣的:*很久很久以前,開辟了天地,用身軀造出日月星辰、山川草木,天地一片繁華Oneday,女媧下界走了一遭,哎!太寂寞,太孤獨(dú)了,沒個(gè)會(huì)笑的、會(huì)哭的、會(huì)說話的東東(后來這個(gè)成了太白金星的寶貝)中烤,就有了人:*我們把這個(gè)生產(chǎn)人的過程用Java程序表現(xiàn)出來:*/publicclassHumanFactory{//定一個(gè)烤箱,泥巴塞進(jìn)去,人就出來,這個(gè)太先進(jìn)了publicstaticHumancreateHuman(Classc){Humanhuman=null;//定義一個(gè)類型的人類try{human=(Human)Class.forName(c.getName()).newInstance();//產(chǎn)生一個(gè)人種}catch(InstationExceptione//你要是不說個(gè)人種顏色的話,沒法烤,要白的黑,你說話了烤System.out.println("必須指定人種的顏色");...第22頁您的設(shè)計(jì)模式System.out.println("人種定義錯(cuò)誤!");catch(ClassNotFoundExceptione//你隨便說個(gè)人種,我到哪里給你去?!System.out.println("混蛋,你指定的人種找不到!");}return您的設(shè)計(jì)模式System.out.println("人種定義錯(cuò)誤!");catch(ClassNotFoundExceptione//你隨便說個(gè)人種,我到哪里給你去?!System.out.println("混蛋,你指定的人種找不到!");}returnhuman;}}然后我們再把女媧出來:packagecom.cbf4life;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*/publicclassNvWa{publicstaticvoidmain(String[]args){//女媧第一次造人,試驗(yàn)性質(zhì),,火候不足,缺陷System.out.println(" 造出的第一批人是這樣的:白人");HumanwhiteHuman=HumanFactory.createHuman(WhiteHuman.class);whiteHuman.cry();whiteHuman.laugh();whiteHuman.talk();//女媧第二次造人,火候加足點(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頁您的設(shè)計(jì)模式HumanyellowHuman=HumanFactory.createHuman(YellowHuman.class);yellowHuman.cry();yellowHuman.laugh();yellowHuman.talk()}}這樣就熱鬧起來了,人也有了,但是這樣創(chuàng)建太累了,神仙也會(huì)累的,那怎么辦?神仙就想了:我塞進(jìn)去一團(tuán)泥巴,隨機(jī)出來一群人,管他是、白人、黃人,只要是人就成(你看看,神仙都偷您的設(shè)計(jì)模式HumanyellowHuman=HumanFactory.createHuman(YellowHuman.class);yellowHuman.cry();yellowHuman.laugh();yellowHuman.talk()}}這樣就熱鬧起來了,人也有了,但是這樣創(chuàng)建太累了,神仙也會(huì)累的,那怎么辦?神仙就想了:我塞進(jìn)去一團(tuán)泥巴,隨機(jī)出來一群人,管他是、白人、黃人,只要是人就成(你看看,神仙都偷懶,何況是我們?nèi)薱reateHuman():packagecom.cbf4life;importjava.util.List;classHumanFactory{//定一個(gè)烤箱,泥巴塞進(jìn)去,人就出來,這個(gè)太先進(jìn)了publicstaticHumancreateHuman(Classc){Humanhuman=null;//定義一個(gè)類型的人類第24頁您的設(shè)計(jì)模式try{human(Human)Class.forName(c.getName()).newInstance();//產(chǎn)生一個(gè)人種}catch(InstationExceptione//你要是不說個(gè)人種顏色的話,沒法烤,要白的黑,你說話了烤System.out.println("必須指定人種的顏色"您的設(shè)計(jì)模式try{human(Human)Class.forName(c.getName()).newInstance();//產(chǎn)生一個(gè)人種}catch(InstationExceptione//你要是不說個(gè)人種顏色的話,沒法烤,要白的黑,你說話了烤System.out.println("必須指定人種的顏色");...System.out.println("人種定義錯(cuò)誤!");catch(ClassNotFoundExceptione//你隨便說個(gè)人種,我到哪里給你去?!System.out.println("混蛋,你指定的人種找不到!");}returnhuman;}//女媧生氣了,把一團(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;}}然后看女媧是如何做的:packagecom.cbf4life;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*/第25頁您的設(shè)計(jì)模式publicclassNvWa{publicstaticvoidmain(String[]args){//女媧第一次造人,試驗(yàn)性質(zhì),,火候不足,缺陷System.out.println(" 造出的第一批人是這樣的:白人您的設(shè)計(jì)模式publicclassNvWa{publicstaticvoidmain(String[]args){//女媧第一次造人,試驗(yàn)性質(zhì),,火候不足,缺陷System.out.println(" 造出的第一批人是這樣的:白人");HumanwhiteHuman=HumanFactory.createHuman(WhiteHuman.class);whiteHuman.cry();whiteHuman.laugh();whiteHuman.talk();//女媧第二次造人,火候加足點(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();//女媧煩躁了,愛是啥人種就是啥人種,燒吧for(inti=0;i<;i++){System.out.println("\n\n隨機(jī)產(chǎn)生人種了 "+i);Humanhuman=HumanFactory.createHuman();human.cry();human.laugh();human.talk();}}}第26頁您的設(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頁您的設(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頁您的設(shè)計(jì)模式}以由父類查找到所有的子類,這個(gè)要修改一下,動(dòng)腦筋想下,簡單的很!完整的類圖如下:Human了算,簡單工廠模式就是這么簡單,那我們再引入一個(gè)問題:人是有的呀,有男有女,你這怎么沒區(qū)別,別急,這個(gè)且聽下回分解!工廠模式還有一個(gè)非常重要的應(yīng)用,就是延遲始化(Lazyinitialization),什么是延遲始化呢?一個(gè)對象初始化完畢后就不,等到再次用到得就不用再次初始化了,直接從內(nèi)存過中拿到就可以了,怎么實(shí)現(xiàn)呢,很簡單,看例子:packagecom.cbf4life.advance;import您的設(shè)計(jì)模式}以由父類查找到所有的子類,這個(gè)要修改一下,動(dòng)腦筋想下,簡單的很!完整的類圖如下:Human了算,簡單工廠模式就是這么簡單,那我們再引入一個(gè)問題:人是有的呀,有男有女,你這怎么沒區(qū)別,別急,這個(gè)且聽下回分解!工廠模式還有一個(gè)非常重要的應(yīng)用,就是延遲始化(Lazyinitialization),什么是延遲始化呢?一個(gè)對象初始化完畢后就不,等到再次用到得就不用再次初始化了,直接從內(nèi)存過中拿到就可以了,怎么實(shí)現(xiàn)呢,很簡單,看例子:packagecom.cbf4life.advance;importjava.util.HashMap;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*/@SuppressWarnings("all")publicclassHumanFactory{//定義一個(gè)MAP,初始化過的Human對象都放在這里第29頁您的設(shè)計(jì)模式privatestaticHashMap<String,Human>humans=newHashMap<String,Human>();//定一個(gè)烤箱,泥巴塞進(jìn)去,人就出來,這個(gè)太先進(jìn)了publicstaticHumancreateHuman(Classc){您的設(shè)計(jì)模式privatestaticHashMap<String,Human>humans=newHashMap<String,Human>();//定一個(gè)烤箱,泥巴塞進(jìn)去,人就出來,這個(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){//你要是不說個(gè)人種顏色的話,沒法烤,要白的}catch(Inst黑,你說話了烤System.out.println("必須指定人種的顏色");}catch(IllegalAccessExceptione){//一定定義的人種有問題,那就烤不出來了,這是...System.out.println("人種定義錯(cuò)誤!");e//你隨便說個(gè)人種,我到哪里給你去?!System.out.println("混蛋,你指定的人種找不到!");}returnhuman;}}很簡單,就加上了黃色那部分的代碼,這個(gè)在類初始化很消耗資源的情況比較實(shí)用,比如你要連接硬減少項(xiàng)目的復(fù)雜程度。第30頁您的設(shè)計(jì)模式6章好了,我們繼一節(jié)課,講到女媧造人,人是造出來了,世界時(shí)熱鬧了,低頭一看,都是清的類型,缺少關(guān)愛、、喜怒哀樂等情緒,人類的生命太平淡了,女媧,猛然一拍腦袋,Shit!忘記給人類定義了,那怎么辦?抹掉重來,然后就把人類重新洗牌,準(zhǔn)備重新開始 人類。怎么改吧,好,有了,給每個(gè)人類都加一個(gè),然后再重新,這個(gè)問題解決了,那八卦爐怎么辦?只有一個(gè)呀,要么生產(chǎn)出全性,要不都是女性,那不行呀,有了,把已經(jīng)有了一條生產(chǎn)線——八卦Factory)拆開,個(gè),并且略加修改,就成了女性八卦爐(只生產(chǎn)女性,一個(gè)具體工廠的實(shí)現(xiàn)類)和男性八卦爐(只生產(chǎn)男性,又一個(gè)具體工廠的實(shí)現(xiàn)類先看人類(也就是)的類圖:其中三個(gè)抽象類在抽象工廠模式中是叫做等級,六個(gè)實(shí)現(xiàn)類是叫做族,這個(gè)也比較好理解,實(shí)現(xiàn)類嘛是真實(shí)的,一個(gè)叫,多了就叫族,然后再看工廠類:第31頁您的設(shè)計(jì)模式6章好了,我們繼一節(jié)課,講到女媧造人,人是造出來了,世界時(shí)熱鬧了,低頭一看,都是清的類型,缺少關(guān)愛、、喜怒哀樂等情緒,人類的生命太平淡了,女媧,猛然一拍腦袋,Shit!忘記給人類定義了,那怎么辦?抹掉重來,然后就把人類重新洗牌,準(zhǔn)備重新開始 人類。怎么改吧,好,有了,給每個(gè)人類都加一個(gè),然后再重新,這個(gè)問題解決了,那八卦爐怎么辦?只有一個(gè)呀,要么生產(chǎn)出全性,要不都是女性,那不行呀,有了,把已經(jīng)有了一條生產(chǎn)線——八卦Factory)拆開,個(gè),并且略加修改,就成了女性八卦爐(只生產(chǎn)女性,一個(gè)具體工廠的實(shí)現(xiàn)類)和男性八卦爐(只生產(chǎn)男性,又一個(gè)具體工廠的實(shí)現(xiàn)類先看人類(也就是)的類圖:其中三個(gè)抽象類在抽象工廠模式中是叫做等級,六個(gè)實(shí)現(xiàn)類是叫做族,這個(gè)也比較好理解,實(shí)現(xiàn)類嘛是真實(shí)的,一個(gè)叫,多了就叫族,然后再看工廠類:第31頁您的設(shè)計(jì)模式createHuman,目的是簡化實(shí)現(xiàn)類的代碼工作量,這個(gè)在講代碼的時(shí)候會(huì)說。這里還使用了Jdk1.5的一個(gè)新特性Enum類型,其實(shí)這個(gè)完全可以類的靜態(tài)變量來實(shí)現(xiàn),但我的知識點(diǎn)吧,我希望給大家講解,每次的提出來,每個(gè)人都會(huì)有一點(diǎn)的收獲就足夠了,然后在具體的項(xiàng)目中使用時(shí),知道有這個(gè)baidu續(xù)類圖,完整的類圖如下,這個(gè)看不大清楚,其實(shí)就是上面那兩個(gè)類圖加起來,大家可以看源碼中的那個(gè)您的設(shè)計(jì)模式createHuman,目的是簡化實(shí)現(xiàn)類的代碼工作量,這個(gè)在講代碼的時(shí)候會(huì)說。這里還使用了Jdk1.5的一個(gè)新特性Enum類型,其實(shí)這個(gè)完全可以類的靜態(tài)變量來實(shí)現(xiàn),但我的知識點(diǎn)吧,我希望給大家講解,每次的提出來,每個(gè)人都會(huì)有一點(diǎn)的收獲就足夠了,然后在具體的項(xiàng)目中使用時(shí),知道有這個(gè)baidu續(xù)類圖,完整的類圖如下,這個(gè)看不大清楚,其實(shí)就是上面那兩個(gè)類圖加起來,大家可以看源碼中的那個(gè)類圖文件:然后類圖講解完畢,我們來看程序?qū)崿F(xiàn):第32頁您的設(shè)計(jì)模式packagecom.cbf4life;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.定義一個(gè)人類的統(tǒng)稱,問題出來了,剛剛定義的時(shí)候忘記定義 了*這個(gè)重要的問題非修改不可,否則*/publicinterface您的設(shè)計(jì)模式packagecom.cbf4life;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.定義一個(gè)人類的統(tǒng)稱,問題出來了,剛剛定義的時(shí)候忘記定義 了*這個(gè)重要的問題非修改不可,否則*/publicinterfaceHuman{//首先定義什么是人類上太多太多的東西不了//人是愉快的,會(huì)笑的,本來是想用spublicvoidlaugh();laugh更合適,好長時(shí)間沒有大笑了;//人類還會(huì)哭,代表痛苦publicvoidcry();//人類會(huì)說話publicvoidtalk();//定義publicvoidsex();}crytalk()三個(gè),以AbstractYellowHuman為例:packagecom.cbf4life.yellowHuman;importcom.cbf4life.Human;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.*為什么要修改成抽象類呢?要定義*/呀publicabstractclassAbstractYellowHumanimplementsHuman{publicvoidcry(){黃色人種會(huì)哭");}第33頁您的設(shè)計(jì)模式publicvoidlaugh(){黃色人種會(huì)大笑,}呀!");publicvoidtalk(){System.out.println("黃色人種會(huì)說話,說的字節(jié)"您的設(shè)計(jì)模式publicvoidlaugh(){黃色人種會(huì)大笑,}呀!");publicvoidtalk(){System.out.println("黃色人種會(huì)說話,說的字節(jié)");}}代碼,大家可以看一下源代碼。算了,還是拷貝,反正是 Eclipse白種人的抽象類:packagecom.cbf4life.whiteHuman;importcom.cbf4life.Human;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.白色人人種*/publicabstractclassAbstractWhiteHumanimplementsHuman{publicvoidcry(){System.out.println("白色人種會(huì)哭");}publicvoidlaugh(){System.out.println("白色人種會(huì)大笑,侵略的笑聲");}第34頁您的設(shè)計(jì)模式publicvoidtalk(){System.out.println("白色人種會(huì)說話,都是但是單字節(jié)!");}}黑種人的抽象類:packagecom.cbf4life.blackHuman;importcom.cbf4life.Human;/**@authorcbf4Lifecbf4life@126.comI'mgladtoshare您的設(shè)計(jì)模式publicvoidtalk(){System.out.println("白色人種會(huì)說話,都是但是單字節(jié)!");}}黑種人的抽象類:packagecom.cbf4life.blackHuman;importcom.cbf4life.Human;/**@authorcbf4Lifecbf4life@126.comI'mgladtosharemyknowledgewithyouall.人的意思,不懂,沒跟老外說話*黑色人種,記得*/英語,說blackman是publicabstractclassAbstractBlackHumanimplementsHuman{publicvoidcry(){}");publicvoidlaugh(){}");publicvoidtalk(){System.out.println("可以說話,人聽不懂");}}三個(gè)抽象類都實(shí)現(xiàn)完畢了,然后就是些實(shí)現(xiàn)類了。其實(shí),你說抽象類放這里有什么意義嗎?就是不允new女性黃種人的實(shí)現(xiàn)類:packagecom.cbf4life.yellowHuman;第35頁您的設(shè)計(jì)模式/**@authorcbf4

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論