Java設(shè)計(jì)模式-圖解-附代碼_第1頁(yè)
Java設(shè)計(jì)模式-圖解-附代碼_第2頁(yè)
Java設(shè)計(jì)模式-圖解-附代碼_第3頁(yè)
Java設(shè)計(jì)模式-圖解-附代碼_第4頁(yè)
Java設(shè)計(jì)模式-圖解-附代碼_第5頁(yè)
已閱讀5頁(yè),還剩59頁(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)介

1、Java設(shè)計(jì)模式-圖解-附代碼目錄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)模

2、式581.3.9 策略模式611.3.10 模板方法631.3.11 訪問者模式651. 設(shè)計(jì)模式內(nèi)容簡(jiǎn)介 有感于設(shè)計(jì)模式在日常開發(fā)中的重要性,同時(shí)筆者也自覺對(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ì)的樂

3、趣。 由于每個(gè)人對(duì)設(shè)計(jì)*式的理解都不盡一致,因此,可能本文檔的例子*有不恰當(dāng)?shù)牡胤剑€望各位讀者指出不恰當(dāng)?shù)牡胤?。歡迎登錄瘋狂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:楊恩雄

4、),也希望通過(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 (

5、單態(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 聲明工廠方法

6、,該方法返回一個(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è)!); p

7、ublic 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 imple

8、ments 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(); teacherWorkFac

9、tory.g*tWork().*oWork(); result 學(xué)生做作業(yè)!老師審批作業(yè)!1.1.2 抽象工廠 提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無(wú)需指定它們具體的類。適用性 1.一個(gè)系統(tǒng)要獨(dú)立于它的產(chǎn)品的創(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. AbstractFactory 聲明一個(gè)創(chuàng)建抽象產(chǎn)品對(duì)象的操作接口。 2.ConcreteFactory 實(shí)現(xiàn)創(chuàng)建具體產(chǎn)品對(duì)象的操作。 3.AbstractProduct 為一類產(chǎn)

10、品對(duì)象聲明一個(gè)接口。 4.ConcreteProduct 定義一個(gè)將被相應(yīng)的具體工廠創(chuàng)建的產(chǎn)品對(duì)象。 實(shí)現(xiàn)abstractProduct接口。 5.Client 僅使用由AbstractFactory和AbstractProduct類聲明的接口類圖例子*bstractFactory public interface IAnimalFactory ICat createCat(); IDog createDog();ConcreteFactory public class BlackAnimalFactory implements IAnimalFactory public ICat creat

11、eCat() return new BlackCat(); public IDog createDog() return new BlackDog(); public class WhiteAnimalFactory implements IAnimalFactory public ICat createCat() return new WhiteCat(); public IDog createDog() return new WhiteDog(); AbstractProduct public interface ICat void eat();public interface IDog

12、void eat();Concrete*roduct public class Blackcat implements ICat public void eat() System.out.println(The black cat is eating!); public class WhiteCat implements ICat public void eat() System.out.println(The white cat is eating! ); public class BlackDog implements IDog public void eat() System.out.p

13、rintln(The black dog is eating); public class WhiteDog implements IDog public void eat() System.out.println(The white dog is eating!); Client public static void main(String args) IAnimalFactory blackAnimalFactory = new BlackAnimalFactory(); ICat blackCat = blackAnimalFactory.createCat(); blackCat.ea

14、t(); IDog blackDog = blackAnimalFactory.createDog(); blackDog.eat(); IAnimalFactory whiteAnimalFactory = new WhiteAnimalFactory(); ICat whiteCat = whiteAnimalFactory.createCat(); whiteCat.eat(); IDog whiteDog = whiteAnimalFactory.createDog(); whiteDog.eat();res*lt The bla*k cat is eating!Th* black d

15、og is eating!The white cat is eating!The white dog is eating!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í)。 2.當(dāng)構(gòu)造過(guò)程必須允許被構(gòu)造的對(duì)象有不同的表示時(shí)。參與者 1.Builder 為創(chuàng)建一個(gè)Product對(duì)象的各個(gè)部件指定抽象接口。 2.ConcreteBuilder 實(shí)現(xiàn)Builder的接口以構(gòu)造和裝配該產(chǎn)品的各個(gè)部件。 定義并明確它所創(chuàng)建的表示. 提供一個(gè)檢索產(chǎn)品的接口。 3.Director

16、構(gòu)造一個(gè)使用Builder接口的對(duì)象。 4.Product 表示被構(gòu)造的復(fù)雜對(duì)象。ConcreteBuilder創(chuàng)建該產(chǎn)品的內(nèi)部表示并定義它的裝配過(guò)程。 包含定義組成部件的類,包括將這些部件裝配成最終產(chǎn)品的接口。類圖例子Builder public interface PersonBuilder void buildHead(); void buildBody(); void buildFoot(); Person buildPerson();ConcreteBuilder public class ManBuilder implements PersonBuilder Person pers

17、on; public ManBuilder() person = new Man(); public void buildBody() person.setBody(建造男人的身體); public void buildFoot() person.setFoot(建造男人的腳); public void buildHead() person.setHead(建造*人的頭); public Person buildPerson() return person; Director public class PersonDirector public Person constructPerson(P

18、ersonBuilder 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 getHead() return head; public void setHead(String head) this.head = head; public String getBody() return

19、body; public void setBody(String body) this.body = body; public String getFoot() return foot; public void setFoot(String foot) this.foot = foot; public class Man extends Person Test public class Test public static void main(String args) PersonDirector pd = new PersonDirector(); Person person = pd.co

20、nstructPerson(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è)訪問它的全局訪*點(diǎn)。適用性 1.當(dāng)類只能有一個(gè)實(shí)例而且客戶可以從一個(gè)眾所周知的訪問點(diǎn)訪問它時(shí)。 2.當(dāng)這個(gè)唯一實(shí)例應(yīng)該是通過(guò)子類化可擴(kuò)展的,并且客戶應(yīng)該無(wú)需更改代碼就能使用一個(gè)擴(kuò)展的實(shí)例時(shí)。參與者 Sing

21、leton 定義一個(gè)Instance操作,允許客戶訪問它的唯一實(shí)例。Instance是一個(gè)類操作。 可能負(fù)責(zé)創(chuàng)建它自己的唯一實(shí)例。類圖例子Singleton public class Singleton private static Singleton sing; private Singleton() public static Singleton getInstance() if (sing = null) sing = new Singleton(); return sing; Test public class Test public static void main(String a

22、rgs) Singleton sing = Singleton.getInstance(); Singleton sing2 = Singleton.getInstance(); System.out.println(sing); System.out.println(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ò)

23、動(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 nam

24、e) = name; public String getName() return ; public Object clone() try return super.clone(); catch (Exception e) e.printStackTrace(); return null; ConcretePrototype public class ConcretePrototype extends Prototype public ConcretePrototype(String name) setName(name); Client public c

25、lass Test public static void main(String args) Prototype pro = new ConcretePrototyte(prototype); Prototype pro2 = (Prototype)pro.clone(); System.out.println(pro.getName(); System.out.println(pro2.getName(); result prototypeprototype1.2 結(jié)構(gòu)型模式Adapter ( 適配器模式) Bridge ( 橋接模式 ) Composite ( 組合模式 ) Decorat

26、or ( 裝飾模式 ) Facade ( 外觀模式 ) Flyweight ( 享元模式 ) Proxy ( 代理模式 ) 1.2.1 適配器模式 將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。適用性 1.你想使用一個(gè)已經(jīng)存在的類,而它的接口不符合你的需求。 2.你想創(chuàng)建一個(gè)可以復(fù)用的類,該類可以與其他不相關(guān)的類或不可預(yù)見的類(即那接口 可能不一定兼容的類)協(xié)同工作。 3.(僅適用于對(duì)象Adapter)你想使用一些已經(jīng)存在的子類,但是不可能對(duì)每一個(gè)都進(jìn)行 子類化以匹配它們的接口。對(duì)象適配器可以適配它的父類接口。參與者 1

27、.Target 定義Client使用的與特定領(lǐng)域相關(guān)的接口。 2.Client 與符合Target接口的對(duì)象協(xié)同。 3.Adaptee 定義一個(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() System.out.println(Adaptee method!); Adap

28、ter public class Adapter implements Target private Adaptee adaptee; public Adapter(Adaptee adaptee) this.adaptee = adaptee; public void adapteeMethod() adaptee.adapteeMethod();public void adapterMethod() System.out.println(Adapter method!); Client public class Test public static void main(String arg

29、s) Target target = new Adapter(new Adaptee(); target.adapteeMethod(); target.adapterMethod(); 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)該可以通過(guò)生成子類的方法加以擴(kuò)充。 這時(shí)Bridge模式使你可以對(duì)不同的抽象接口和實(shí)現(xiàn)部分進(jìn)行組合,

30、并分別對(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)類的接口,該接口不一定要與Abstraction的接口完全一致。 事實(shí)上這兩

31、個(gè)接口可以完全不同。 一般來(lái)講,Implementor接口僅提供基本操作,而Abstraction則定義了基于這些基本操作的較高層次的操作。 4.ConcreteImplementor 實(shí)現(xiàn)Implementor接口并定義它的具體實(shí)現(xiàn)。類圖例子Abstr*ction public abstract class Person private Clothing clothing; private String type; public Clothing getClothing() return clothing; public void setClothing() this.clothing =

32、ClothingFactory.getClothing(); public void setType(String type) this.type = type; public String getType() return this.type; public abstract void dress();RefinedAbstraction public class Man extends Person public Man() setType(男人); public void dress() Clothing clothing = getClothing(); clothing.person

33、DressCloth(this); public class Lady extends Person public Lady() setType(女人); public void dress() Clothing clothing = getClothing(); clothing.personDressCloth(this); Implemento* public abstract class Clothing public abstract void personDressCloth(Person person);ConcreteImplemento* public class Jacke

34、t extends Clothing public void personDressCloth(Person person) System.out.println(person.getType() + 穿馬甲); public class Trouser extends Clothing public void personDressCloth(Person person) System.out.println(person.getType() + 穿褲子); Test public class Test public static void main(String args) Person

35、man = new Man(); Person lady = new Lady(); Clothing jacket = new Jacket(); Clothing trouser = new Trouser(); jacket.personDressCloth(man); trouser.personDressCloth(man); jacket.personDressCloth(lady); trouser.personDressCloth(lady); result 男人穿馬甲男人穿褲子女人穿馬甲女人穿褲子1.2.3 組合模式 將對(duì)象組合成樹形結(jié)構(gòu)以表示部分-整體的層次結(jié)構(gòu)。Compo

36、site使得用戶對(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è)接口用于訪問和管理Component的子組件。 (可選)在遞歸結(jié)構(gòu)中定義一個(gè)接口,用于訪問一個(gè)父部件,并在合并的情況下實(shí)現(xiàn)它。 2.Leaf 在組合中表示葉節(jié)點(diǎn)對(duì)象,葉節(jié)點(diǎn)沒有子節(jié)點(diǎn)。 在組合中定義節(jié)點(diǎn)對(duì)象的行為。 3.Composite 定義有子部件的一些部件的行為。 存儲(chǔ)子部件。 在Compone

37、nt接口中實(shí)現(xiàn)與子部件所有的操作。 4.Client 通過(guò)Component接口操縱組合部件的對(duì)象。類圖例子Component public abstract class Employer private String name; public void setName(String name) = name; public String getName() return ; public abstract void add(Employer employer); public abstract void delete(Employer employer)

38、; public List employers; public void printInfo() System.out.println(name); public List getEmployers() return this.employers; Leaf public class Programmer extends Employer public Programmer(String name) setName(name); employers = null;/程序員, 表示沒有下屬了 public void add(Employer employer) public void delet

39、e(Employer employer) public class ProcectAssistant extends Employer public ProjectAssistant(String name) setName(name); employers = null;/項(xiàng)目助理, 表示沒有下屬了 public void add(Employer employer) public void delete(Employer employer) Composite public class Projectmanager extends Employer public ProjectManage

40、r(String name) setName(name); employers = new ArrayList(); public void add(Employer employer) employers.add(employer); public void delete(Employer employer) employers.remove(employer); Clie*t public class Test public static void main(String args) Employer pm = new ProjectManager(項(xiàng)目經(jīng)理); Employer pa =

41、 new ProjectAssistant(項(xiàng)目助理); Employer programmer1 = 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.getEmployers(); for (Employer em : ems) System.out.println(em.getName(); result 項(xiàng)目助理程序員二1.2.4 裝飾模式 動(dòng)態(tài)地給一個(gè)對(duì)象添加一些

42、額外的職責(zé)。就增加功能來(lái)說(shuō),Decorator模式相比生成子類更為靈活。適用性 1.在不影響其他對(duì)象的情況下,以動(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定義一個(gè)對(duì)象接口,

43、可以給這些對(duì)象動(dòng)態(tài)地添加職責(zé)。public interface Person void eat();ConcreteComponent 定義一個(gè)對(duì)象,可以給這個(gè)對(duì)象添加一些職責(zé)。public class Man implements Person public void eat() System.out.println(男人在吃);Decorator 維持一個(gè)執(zhí)行Component對(duì)象的指針,并定義一個(gè)與Componect 接口一致的接口。public abstract class Decorator implements Person protected Person person; pub

44、lic void setPerson(Person person) this.person = person; public void eat() person.eat(); ConcreteDectrator 想組建添加職責(zé)public class ManDecoratorA extends Decorator public void eat() super.eat(); reEat(); System.out.println(ManDecoratorA類); public void reEat() System.out.println(再吃一頓飯); public class ManDecoratorB extends Decorator public void eat() super.eat(); System.out.

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論