![Java的23種設(shè)計(jì)模式(瘋狂Java總結(jié)).docx_第1頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-3/6/955a67ac-3499-4961-97db-a22be1c225cf/955a67ac-3499-4961-97db-a22be1c225cf1.gif)
![Java的23種設(shè)計(jì)模式(瘋狂Java總結(jié)).docx_第2頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-3/6/955a67ac-3499-4961-97db-a22be1c225cf/955a67ac-3499-4961-97db-a22be1c225cf2.gif)
![Java的23種設(shè)計(jì)模式(瘋狂Java總結(jié)).docx_第3頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-3/6/955a67ac-3499-4961-97db-a22be1c225cf/955a67ac-3499-4961-97db-a22be1c225cf3.gif)
![Java的23種設(shè)計(jì)模式(瘋狂Java總結(jié)).docx_第4頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-3/6/955a67ac-3499-4961-97db-a22be1c225cf/955a67ac-3499-4961-97db-a22be1c225cf4.gif)
![Java的23種設(shè)計(jì)模式(瘋狂Java總結(jié)).docx_第5頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-3/6/955a67ac-3499-4961-97db-a22be1c225cf/955a67ac-3499-4961-97db-a22be1c225cf5.gif)
已閱讀5頁(yè),還剩64頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java設(shè)計(jì)模式(瘋狂Java聯(lián)盟版)目錄1. 設(shè)計(jì)模式31.1 創(chuàng)建型模式41.1.1 工廠方法41.1.2 抽象工廠61.1.3 建造者模式101.1.4 單態(tài)模式131.1.5 原型模式151.2 結(jié)構(gòu)型模式171.2.1 適配器模式171.2.2 橋接模式191.2.3 組合模式231.2.4 裝飾模式261.2.5 外觀模式291.2.6 享元模式321.2.7 代理模式341.3 行為型模式371.3.1 責(zé)任鏈模式371.3.2 命令模式401.3.3 解釋器模式431.3.4 迭代器模式451.3.5 中介者模式491.3.6 備忘錄模式521.3.7 觀察者模式541.3.8 狀態(tài)模式581.3.9 策略模式611.3.10 模板方法631.3.11 訪問(wèn)者模式651. 設(shè)計(jì)模式(超級(jí)詳細(xì))內(nèi)容簡(jiǎn)介 有感于設(shè)計(jì)模式在日常開發(fā)中的重要性,同時(shí)筆者也自覺(jué)對(duì)設(shè)計(jì)模式小有心得,故筆者*寫二十三種設(shè)計(jì)模式的簡(jiǎn)單例子、并整理二十三種設(shè)計(jì)模式的理論部分,綜合匯總成這份Java設(shè)計(jì)模式(瘋狂J*va聯(lián)盟版),希望對(duì)大家有所幫助。 本份幫助文檔主要是為了向讀者介紹二十三種設(shè)計(jì)模式,包括模式的描述,適用性,模*的組成部分,并附帶有簡(jiǎn)單的例子和類*,目的是為了讓讀*了解二十三種*計(jì)模式,并能方便的查閱各種設(shè)計(jì)模*的用法及注意點(diǎn)。 所附的例子非常簡(jiǎn)單,慢慢的引導(dǎo)讀者從淺到深了解設(shè)計(jì)模式,并能從中享受設(shè)計(jì)的樂(lè)趣。 由于每個(gè)人對(duì)設(shè)計(jì)*式的理解都不盡一致,因此,可能本文檔的例子*有不恰當(dāng)?shù)牡胤?,還望各位讀者指出不恰當(dāng)?shù)牡胤健g迎登錄瘋狂J*va聯(lián)盟進(jìn)行技術(shù)交流,瘋狂Java聯(lián)盟的論壇宗旨是: 所有的技術(shù)發(fā)帖,均有回復(fù)。 瘋狂Java聯(lián)盟網(wǎng)址:筆者簡(jiǎn)介 筆者曾師從李剛老師學(xué)習(xí)Java,現(xiàn)居廣州。對(duì)Java軟件開發(fā)、各種Java開源技術(shù)都非常感興趣,曾參與開發(fā)、主持*發(fā)過(guò)大量Java、Java EE項(xiàng)目,對(duì)Java、Java *E項(xiàng)目有一定認(rèn)識(shí)*見解。歡迎大家與筆者就Java、Java EE相*方面進(jìn)行技術(shù)交流。 筆者現(xiàn)為瘋狂Jav*聯(lián)盟的總版主(論壇ID:楊恩雄),也希望通過(guò)該平臺(tái)與大家分享Java、Java EE技術(shù)、*得。 本人郵箱: 聲明 本文檔編寫、制作過(guò)程中得到了瘋狂Java聯(lián)盟、以及筆者學(xué)習(xí)工作過(guò)程大量朋友的支持,大家都抱著一個(gè)目的:為國(guó)內(nèi)軟件軟件開發(fā)事業(yè)作出綿薄貢獻(xiàn)。 我們?cè)诖肃嵵匦迹?檔遵循Apache 2.0協(xié)議。在完整保留全部文本(包括本版權(quán)頁(yè)),并且不違反Apache 2.0協(xié)議的前提下,允許和鼓勵(lì)任何人進(jìn)行全文轉(zhuǎn)載及推廣,我們放棄除署名權(quán)外的一切權(quán)利。1.1 創(chuàng)建型模式AbstractFactory ( 抽象工廠 ) FactoryMethod ( 工廠方法 ) Singleton ( 單態(tài)模式 ) Builder ( 建造者模式 ) Protot*pe * 原型模式 ) 1.1.1 工廠方法 *義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類。FactoryMethod使一個(gè)類的實(shí)例*延遲到其子類。適用性 1.當(dāng)一個(gè)類不知道它所必須創(chuàng)建的對(duì)象的類的時(shí)候。 2.當(dāng)一個(gè)類希望由它的子類來(lái)指定它所創(chuàng)建的對(duì)象的時(shí)候。 3.當(dāng)*將創(chuàng)建對(duì)象的職責(zé)委托給多個(gè)幫助*類中的某一個(gè),并且*希望將哪一個(gè)幫助子類是代理者這一信息局部化的時(shí)候。參與者 1.Product 定義工廠方法所創(chuàng)建的對(duì)象的接口。 2.ConcreteProduct 實(shí)現(xiàn)Product接口。 3.Creator 聲明工廠方法,該方法返回一個(gè)Product類型的對(duì)象* Creator也可以定義一個(gè)工廠方法的缺省實(shí)現(xiàn),它返回一個(gè)缺省的ConcreteProduct對(duì)象。 可以調(diào)用工廠方法以創(chuàng)建一個(gè)Product對(duì)象。 4.ConcreteCreator 重定義工廠方法以返回一個(gè)ConcreteProduct實(shí)例。類圖例子*roduct public interface Work void doWork();ConcreteProduct public class StudentWork implements Work public void doWork() System.out.println(學(xué)生*作業(yè)!); public class TeacherWork implements Work public void doWork() System.out.println(老師審批作業(yè)!); Creator public interface IWorkFactory Work get*ork();Concre*eCreator pu*lic class StudentWorkFactory implements IWorkFactory public Work getWork() *eturn new StudentWork(); public class TeacherWorkFactory implements IWorkFactory public Work getWork() return new TeacherWork(); Test public class Test public static void m*in(Strin* args) IWorkFactory studentWorkFactory = new StudentWorkFactory(); studentWorkFactory.getWork().d*Work(); IWorkFactory teacherWorkFactory * new TeacherWorkFactory(); teacherWorkFactory.g*tWork().*oWork(); result 學(xué)生做作業(yè)!老師審批作業(yè)!1.1.2 抽象工廠 提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無(wú)需指定它們具體的類。適用性 1.一個(gè)系統(tǒng)要獨(dú)立于它的*品的創(chuàng)建、組合和表示時(shí)。 2.一個(gè)系統(tǒng)要由多個(gè)產(chǎn)品系列中的一個(gè)來(lái)配置時(shí)。 3.當(dāng)你要強(qiáng)調(diào)一系列相關(guān)的產(chǎn)品對(duì)象的設(shè)計(jì)以便進(jìn)行聯(lián)合使用時(shí)* 4*當(dāng)你提供一個(gè)產(chǎn)品類庫(kù),而只想顯示它們*接口而不是實(shí)現(xiàn)時(shí)。參與者 1.Ab*tractFactory 聲明一個(gè)創(chuàng)建抽象產(chǎn)品對(duì)象的操作接口。 2.ConcreteFactory 實(shí)現(xiàn)創(chuàng)建具體產(chǎn)品對(duì)象的操作。 *.AbstractProduct 為一類產(chǎn)品對(duì)象聲明一個(gè)接口。 4.ConcreteProdu*t 定義一個(gè)將被相應(yīng)的具體工廠創(chuàng)建的產(chǎn)品*象。 實(shí)現(xiàn)*bstractProduct接口。 5.Client 僅使用由AbstractFactory和AbstractProduc*類聲明的接口類圖例子*bstractFactory public interface IAn*malFactory ICat createCat(); IDog cre*teDog();ConcreteFactory p*blic class BlackAnimalFactory implem*nts IAnimalFactory public ICat createCat() retur* new BlackCat(); public IDog createDog() return new BlackDog(); public class WhiteAnimalFac*ory imp*ements IAnimalFactory public ICat createCat() return new WhiteCat(); public IDog cre*teDog() return new WhiteDog(); Abstrac*Product public interface ICat void eat();public interface IDog void eat();Concrete*roduct public class Black*at implements ICat public void eat() System.out.println(The bl*ck cat is eating!); public class WhiteCat implements *Cat public void eat() Sy*tem.out.prin*ln(The w*ite cat is eating!*); public class BlackDog implements IDog public void eat() System.out.println(The black dog is eating); public class WhiteDog implements IDog public void eat() System.out.println(The white dog is eat*ng!); Client public static void main(String args) IAnimalFactory blackAnimalFa*tory = new BlackAnimalFactory(); ICat blackCat = blackAnimalFactory.createCat(); blackCat.eat(); IDog blackD*g = blackAnimalFactory.createDog(); blackDog.eat(); IAnimalFactory whiteAnimalF*ctory = new WhiteAnimalFactory(); ICat whiteCat = whiteAnimalFactory.createCat(); whiteCat.eat(); IDog *hiteDog = whiteAnimalFactory.createDog(); whiteDog.eat();res*lt The bla*k cat is eating!Th* black dog is eatin*!The white cat is eating!The white dog is *ating!1.1.3 建造者模式 將一個(gè)復(fù)雜對(duì)象的構(gòu)*與它的表示分離,使*同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。適用性 1.當(dāng)創(chuàng)建復(fù)雜對(duì)象的算法應(yīng)該獨(dú)立于該對(duì)象的組成部分以及它們的裝配方式時(shí)。 *.當(dāng)構(gòu)造過(guò)程必須允*被構(gòu)造的對(duì)象有不同*表示時(shí)。參與者 1.Builder 為創(chuàng)建一個(gè)Product對(duì)象的各個(gè)部件指定抽象接口。 2.ConcreteBuilder 實(shí)現(xiàn)Buil*er的接口以構(gòu)造和裝配該產(chǎn)品的各個(gè)部件。 定義并明確它所創(chuàng)建的表示* 提供一個(gè)檢索產(chǎn)品的接口。 3.Director 構(gòu)造一個(gè)使用Builder接口的對(duì)象。 4.Product 表示被構(gòu)造的復(fù)雜對(duì)象。ConcreteBuilder創(chuàng)建該產(chǎn)品的內(nèi)部表示并定義它的裝配過(guò)程。 包含定義組成部件的類,包括將這些部件裝配成最終產(chǎn)品的接口。類圖例子Buil*er public interface PersonBuilder void buildHead(); v*id buildBody(); void buildFoot()* Person buildPerson();ConcreteBuilder public class ManBuilder implements PersonB*ilder Person person; public ManBuilder() person = ne* Man(); publ*c void build*ody() perso*.setBody(建造男人的身體); public void buildFoot() person.setFo*t(建造男人的腳); public void buildHead() pers*n.setHead(建造*人的頭); *ublic Person buildPerson() retur* person; Dir*ctor public class PersonDirec*or public Person constructPerson(PersonBuilder pb) pb.buildHead(); pb.buildBody(); pb.buildFoot(); return pb.buildPerson(); Product public class Person private String head; private String body; private String foot; public String getH*ad() return head; public void setHead(String hea*) this.head = head; public String getBody() return body; public void setBody(String body) this.b*dy = body; public String getFoot() return foot; public void setFoot(String foot) t*is.foot = foot; public class Man extends Person Test publ*c class Test public static void main(String ar*s) PersonDirector pd = new PersonDirector(); Person person = pd.constructPerson(new ManBuilder(); System*out.println(person.getBody(); System.out.println(person.getFoot(); System.out.println(person.getHead(); result 建造男人*身體建造男*的腳建造男人的頭1.1.4 單態(tài)模式 保證一個(gè)類僅有一個(gè)實(shí)例,*提供一個(gè)訪問(wèn)它的全局訪*點(diǎn)。適用性 1.當(dāng)類只能有一個(gè)*例而且客戶可以從一個(gè)眾所周知的訪問(wèn)點(diǎn)訪問(wèn)它時(shí)。 2.當(dāng)這個(gè)唯一實(shí)例應(yīng)該是通過(guò)子類化可擴(kuò)展的,并且客戶應(yīng)該無(wú)需更改代碼就能使用一個(gè)擴(kuò)展的實(shí)例時(shí)。參與者 Singleton 定義一個(gè)Instance操作,允許客戶訪問(wèn)它的唯一實(shí)例。Instance是一個(gè)類操作。 可能負(fù)*創(chuàng)建它自己的唯一實(shí)例。類圖例子Singleton public class Singleton private static Singleton sing; private Singleton() public st*tic Singleton get*nstance() if (sing = null) sing = new Singleto*(); return sing; Test public class Test public static void *ain(*tring args) Singleton sing = Singleton.getInstance(); Singleton si*g2 = Singleton.getI*stance(); System.out.println(sing); System.out.pr*ntln(sing2); result singleton.Singleton1c78e57singleton.Singleton1c78e571.1.5 原型模式 用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象。適用性 1.當(dāng)一個(gè)系統(tǒng)應(yīng)該獨(dú)立于它的產(chǎn)品創(chuàng)*、構(gòu)成和表示時(shí)。 2.當(dāng)要實(shí)例化的類是在運(yùn)行時(shí)刻指定時(shí),例如,通過(guò)動(dòng)態(tài)裝載。 3.為了避免創(chuàng)建一個(gè)與產(chǎn)品類層次平行的工廠*層次時(shí)。 4.當(dāng)一個(gè)類的實(shí)例只能有幾個(gè)不同狀態(tài)組合中的一種時(shí)。 建立相應(yīng)數(shù)目的原型并克隆它們可能比每次用合適的狀態(tài)手工實(shí)例化該類更方便一些。參與者 1. Prototype 聲明一個(gè)克隆自身的接口。 2. ConcretePrototype 實(shí)現(xiàn)一個(gè)克隆自身的操作。 3. Client 讓一個(gè)原型克*自身從而創(chuàng)建一個(gè)新的對(duì)象。類圖例子Prototype public class Prototype implements Cloneable private String name; public void setName(String name) = name; public String getName() return ; public Object clone() try return super.clone(); catch (Exception e) e.printStackTrace(); return null; ConcretePrototype publ*c class ConcretePrototype extend* Prototype public ConcretePrototype(String name) setName(name); Client public clas* Test public static void main(String args) Prototype pro = new ConcretePrototy*e(prototype); Prototype pro2 = (Prototype)pro.clone(); *ystem.out.println(pro.getName()*; System.out.println(pro2.getName(); result prototypeprototype1.2 結(jié)構(gòu)型模式Adapter * 適配器模式 * Bridge ( 橋接模* ) Composite ( 組合模式 ) Decorator ( 裝*模式 ) Facade ( 外觀模式 ) Flyweight ( 享元模式 ) Proxy ( 代理模式 ) 1.2.1 適配器模式 將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。Adapter模式使得原本由于接口*兼容而不能一起工作的那*類可以一起工作。適用性 1.你想使*一個(gè)已經(jīng)存在的類,而它的接口不符合你的需求。 2.你想創(chuàng)建一個(gè)可以復(fù)用的類,該類可以與其他不相關(guān)的類或不可預(yù)見的類(即那*接口 可能不一定兼容的類)協(xié)同工作。 *.(僅適用于對(duì)象Adapter)你想使用一些已經(jīng)存在的子類,但是不可能對(duì)每一個(gè)都進(jìn)行 子類化以匹配它們的接口。對(duì)象適配器可以適配它的父類接口。參與者 1.Target 定義Client使用的與特定領(lǐng)域相關(guān)的接口。 2.Client 與符合Target接口的對(duì)象協(xié)同。 3.Adapt*e 定義一個(gè)已經(jīng)存在的接口,這個(gè)接口需要適配。 4.Adapter 對(duì)Adaptee的接口與Target接口進(jìn)行適配類圖例子Target public interface Target void adapteeMethod(); void adapterMethod();Adaptee public class Adaptee public void adapteeMethod() Syste*.out.p*intln(Adaptee method!); Adapt*r public clas* Adapter implement* Target private Adap*ee adaptee; public Adapter(Adaptee adaptee) this.adapte* = adaptee; public void adapteeMethod() adaptee.adapteeMethod();public void adapterMethod() *ystem.out.println(Adapter method!); Client public cla*s Test public stati* void main(String args) Target target = new Adapter(new Adaptee(); tar*et.adapteeMethod(); target.adapterM*thod(); result Adaptee method!Adapter method!1.2.2 橋接模式 將抽象部分與它*實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。適用性 1.你不希望在抽*和它的實(shí)現(xiàn)部分之間有一個(gè)固定的綁定關(guān)系。 例如這種情況可能是因?yàn)椋诔绦蜻\(yùn)行時(shí)刻實(shí)現(xiàn)部分應(yīng)可以*選擇或者切換。 2.類的抽象以及它的實(shí)現(xiàn)都應(yīng)該可以通*生成子類的方法加以擴(kuò)充。 這時(shí)Bridge模式使你可以對(duì)不同的抽象接口和實(shí)現(xiàn)部分進(jìn)行組合,并分別對(duì)它們進(jìn)行擴(kuò)充。 3.對(duì)一個(gè)抽象的實(shí)現(xiàn)部分的修改應(yīng)對(duì)客戶不產(chǎn)生影響,即客戶的代碼不必重新編譯。 4.正如在意圖一節(jié)的第一個(gè)類圖中所示的那樣,有許多類要生成。 這*一種類層次結(jié)構(gòu)說(shuō)明你必須將一個(gè)對(duì)象分解成兩個(gè)部分。 5.*想在多個(gè)對(duì)象間共享實(shí)現(xiàn)(可能使用引用計(jì)數(shù)),但同時(shí)要求客戶并不知*這一點(diǎn)。參與者 1.Abstraction 定義抽象類的接口。 維護(hù)一個(gè)指向Implementor類型對(duì)象的指針。 2.RefinedAbstraction 擴(kuò)充由Abstraction定義的接口。 3.Implementor 定義實(shí)現(xiàn)類的接口,該接口不一定要與Ab*traction的接口完全一致。 事實(shí)上這兩個(gè)接口可以完全不同。 *般來(lái)講,Implementor接口僅提供基本操作,而Abstraction則定義了基于這些基本操作的較高層次的操作。 4.ConcreteImplementor *現(xiàn)Implementor接口并定義它的具體實(shí)現(xiàn)。類圖例子Abstr*ction public abstract class Person private Clothing clothing; pr*vate String type; public Clothing getClothing() return clothing; publi* void setClothing() this.clothing = *lothingFactory.getClothing(); public void setType(String type) t*is.type = type; public String getType() return this.ty*e; public abstract void dress();RefinedAbstraction public class Man extends *erson public Man() setType(男人); public void dress() Clothing clothing = get*lothing(); clothing.personDressCloth(this); public class Lady extends Person public Lady() setTyp*(女人); public void dress() Cloth*ng clothing = getClothing(); c*othing.personDressCloth(this); Implemento* public abstract class Clothing public abstract void personDressC*oth(*erson person);ConcreteImplemento* public class *ack*t extends Clothing public void personDressCloth(Person person) System.out.println(person.getType() + 穿馬甲); public cl*ss Trouser extends Clothing public void personDressCloth(Person person) System.ou*.println(*erson.getType() + 穿褲子); Test public class Te*t public s*atic void main(String args) Person man = new Man(); Person lady = new Lady(); Clothing jacket = new Ja*ket(); Clot*ing trouser = new Trouser(); jacket.personDressCloth(man); trouser.personDressCloth(man); j*cket.personDressCloth(lady); trouser.personDressCloth(lady); result 男人穿馬甲男人穿褲子女人穿馬甲女人穿褲子1.2.3 組合模式 將對(duì)象組合成樹形結(jié)構(gòu)以表示部分-整體的層次結(jié)構(gòu)。Composite使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)*的使用具有一致性。適用性 1.你想表示對(duì)象的部分-整*層次結(jié)構(gòu)。 2.你希望用戶忽略組合對(duì)象與單個(gè)對(duì)象的不同,用戶將統(tǒng)一地使用組合結(jié)構(gòu)中的所有對(duì)象。參與者 1.Component 為組合中的對(duì)象聲明接口。 在適當(dāng)?shù)那闆r下,實(shí)現(xiàn)所有類共有接口的缺省行為。 聲明一個(gè)接口用于訪問(wèn)和管理Component的子組件。 (可選)在遞歸結(jié)構(gòu)中定義一個(gè)接口,用于訪問(wèn)一個(gè)父部件,并在合*的情況下實(shí)現(xiàn)它。 2.Leaf 在組合中表示葉節(jié)點(diǎn)對(duì)象,葉節(jié)點(diǎn)沒(méi)有子節(jié)點(diǎn)。 在組合中定義節(jié)點(diǎn)對(duì)象的行為。 3.Compos*te 定義有子部件的*些部件的行為。 存儲(chǔ)子部件。 在Component接口中實(shí)現(xiàn)與子部件有*的操作。 4.Client 通過(guò)Component接*操縱組合部件的對(duì)象。類圖例子Component p*blic abstract class Employer private String name; public void setName(String name) = *ame; public String getName() return ; public abstract void add(Employer employer*; public abstract void delete(Employer employer); public List employers; public void printInfo*) System.out.println(name); *ublic List getE*ployers() return this.employers; Leaf public class Programmer extends Employer public Programmer(String name) setNam*(name); employers = null;/程序員, 表示沒(méi)有下屬了 public v*id add(Employer employer) public void delete(Employer employer) public class Pro*ectAssistant extends Employer public ProjectAss*stant(String name) setName(name); employers = *ull;/項(xiàng)目助理, 表示沒(méi)有下屬了 public void add(Employer employer) public void delet*(Employer employer) Composite public class Project*anager extends E*ployer public ProjectManager(String name) setName(name); employers = new A*rayList(); public void add(Employer employer) employers.add(employer); public void delete(Emplo*er employer) employers.remove(employer); Clie*t publ*c class Test public st*tic void main(String args) Employer pm = new ProjectManager(項(xiàng)目經(jīng)理); Emplo*er pa = new ProjectAssistant(項(xiàng)目助理); Employer progra*mer1 = new Programmer(程序員一); Employer programmer2 = new Programmer(程序員二); pm.add(pa);/為項(xiàng)目經(jīng)理添加項(xiàng)目助理 pm.add(programmer2);/*項(xiàng)目經(jīng)理*加程序員 List ems = pm.getEm*loyers(); for (Employer em : ems) System.out.println(em.getNam*(); *result 項(xiàng)目助理程序員二1.2.4 裝飾模式 動(dòng)態(tài)地給一個(gè)對(duì)象添加一些額外的職責(zé)。就增加功能來(lái)說(shuō),Decorator模*相比生成子類更為*活。適用性 1.在不影響其他*象的情況下,以動(dòng)態(tài)、透明的方式給單個(gè)對(duì)象添加職責(zé)。 2.處理那些可以撤消的職責(zé)。 3.當(dāng)不能采用生成子類的方法進(jìn)行擴(kuò)充時(shí)。參與者 1.Component 定義一個(gè)對(duì)象接口,可以給這些對(duì)象動(dòng)態(tài)地添加職責(zé)。 2.ConcreteComponent 定義一個(gè)對(duì)象,可以給這個(gè)對(duì)象添加一些職責(zé)。 3.Decorator 維持一個(gè)指向Component對(duì)象的指針,并定義一個(gè)與Component接口一致的接口。 4.ConcreteDecorator 向組件添加職責(zé)。類圖例子Component public interface Person void eat();ConcreteComponent *ublic class M*n implements Person public void eat() System.out.println(男人在吃);*Decorator public abstrac* class Decorator implements Perso* protected Person person* public void setPerson(Person person) this.person = person; public void eat() person.eat(); ConcreteDec*rator publi* class ManDecoratorA extends Decorator public void eat() super.eat(); reEat(); Sy*tem.out.println(ManDecoratorA類); public void reEat() System.out.println(再吃一頓飯); *public class ManDecoratorB extends Decorator * public void eat() super.eat(); Syst*m.out.println(=); System.out.println(ManDecoratorB類); Test public
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 8 沏茶問(wèn)題(說(shuō)課稿)-2024-2025學(xué)年四年級(jí)上冊(cè)數(shù)學(xué)人教版001
- Unit 8 I can do this for you?(說(shuō)課稿)-2024-2025學(xué)年譯林版(三起)(2024)英語(yǔ)三年級(jí)上冊(cè)
- Review Module Unit 1(說(shuō)課稿)-2023-2024學(xué)年外研版(三起)英語(yǔ)五年級(jí)下冊(cè)
- 2024-2025學(xué)年新教材高中生物 第5章 基因突變及其他變異 微專題六 遺傳變異相關(guān)的解題方法說(shuō)課稿 新人教版必修第二冊(cè)
- 2025合同樣例舞臺(tái)燈光音響租賃合同范本
- 2024春八年級(jí)語(yǔ)文下冊(cè) 第1單元 2回延安說(shuō)課稿 新人教版
- 5草船借箭說(shuō)課稿-2023-2024學(xué)年五年級(jí)下冊(cè)語(yǔ)文統(tǒng)編版
- Unit1 Making friends(說(shuō)課稿)-2024-2025學(xué)年人教PEP版(2024)英語(yǔ)三年級(jí)上冊(cè)
- 2024-2025學(xué)年高中化學(xué) 第一章 物質(zhì)結(jié)構(gòu)元素周期律 第一節(jié) 元素周期表第3課時(shí)說(shuō)課稿3 新人教版必修2
- 陽(yáng)光板雨棚施工方案
- 2025屆高三數(shù)學(xué)一輪總復(fù)習(xí) 第六章 專題六 幾何體的外接球與內(nèi)切球問(wèn)題配套課件
- 引水隧洞施工支洞專項(xiàng)施工方案
- JT-T-496-2018公路地下通信管道高密度聚乙烯硅芯塑料管
- 貴州省銅仁市2024年中考英語(yǔ)模擬試卷(含答案)
- DB43-T 2939-2024 醬腌菜咸胚中亞硝酸鹽的測(cè)定頂空-氣相色譜法
- 食材配送投標(biāo)方案技術(shù)標(biāo)
- 再見深海合唱簡(jiǎn)譜【珠海童年樹合唱團(tuán)】
- 高中物理 選修1 第四章 光(折射反射干涉衍射偏振)(2024人教版)
- 計(jì)算機(jī)安全弱口令風(fēng)險(xiǎn)
- 舜宇集團(tuán)2024測(cè)試題
- 《聚焦客戶創(chuàng)造價(jià)值》課件
評(píng)論
0/150
提交評(píng)論