《Java与模式》重点总结06.docx
- 文档编号:10751834
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:24
- 大小:484.36KB
《Java与模式》重点总结06.docx
《《Java与模式》重点总结06.docx》由会员分享,可在线阅读,更多相关《《Java与模式》重点总结06.docx(24页珍藏版)》请在冰点文库上搜索。
《Java与模式》重点总结06
十六、迭代子(Iterator)模式
1、白箱聚集与外禀迭代子
(1)示例类图
(2)示例代码清单
packagecom.javapatterns.iterator.whitebox;
abstractpublicclassAggregate{
publicIteratorcreateIterator(){
returnnull;
}
}
packagecom.javapatterns.iterator.whitebox;
publicclassConcreteAggregateextendsAggregate{
privateObjectobjs[]={"MonkTang","Monkey","Pigsy","Sandy","Horse"};
publicIteratorcreateIterator(){
returnnewConcreteIterator(this);
}
publicObjectgetElement(intindex){
if(index returnobjs[index]; }else{ returnnull; } } publicintsize(){ returnobjs.length; } } packagecom.javapatterns.iterator.whitebox; publicinterfaceIterator{ voidfirst(); voidnext(); booleanisDone(); ObjectcurrentItem(); } packagecom.javapatterns.iterator.whitebox; publicclassConcreteIteratorimplementsIterator{ /** *@directed */ privateConcreteAggregateagg; privateintindex=0; privateintsize=0; publicConcreteIterator(ConcreteAggregateagg){ this.agg=agg; size=agg.size(); index=0; } publicvoidfirst(){ index=0; } publicvoidnext(){ if(index index++; } } publicbooleanisDone(){ return(index>=size); } publicObjectcurrentItem(){ returnagg.getElement(index); } } packagecom.javapatterns.iterator.whitebox; publicclassClient{ /** *@directed */ privateIteratorit; /** *@directed */ privateAggregateagg=newConcreteAggregate(); publicvoidoperation(){ it=agg.createIterator(); while(! it.isDone()){ System.out.println(it.currentItem().toString()); it.next(); } } publicstaticvoidmain(String[]args){ Clientclient=newClient(); client.operation(); } } 2、黑箱聚集与内禀迭代子 (1)示例类图 (2)示例代码清单 packagecom.javapatterns.iterator.blackbox; abstractpublicclassAggregate{ publicIteratorcreateIterator(){ returnnull; } } packagecom.javapatterns.iterator.blackbox; publicclassConcreteAggregateextendsAggregate{ privateObject[]objs={"MonkTang","Monkey","Pigsy","Sandy","Horse"}; publicIteratorcreateIterator(){ returnnewConcreteIterator(); } privateclassConcreteIteratorimplementsIterator{ privateintcurrentIndex=0; publicvoidfirst(){ currentIndex=0; } publicvoidnext(){ if(currentIndex currentIndex++; } } publicbooleanisDone(){ return(currentIndex==objs.length); } publicObjectcurrentItem(){ returnobjs[currentIndex]; } } } packagecom.javapatterns.iterator.blackbox; publicinterfaceIterator{ voidfirst(); voidnext(); booleanisDone(); ObjectcurrentItem(); } packagecom.javapatterns.iterator.blackbox; publicclassClient{ /** *@directed */ privateIteratorit; /** *@directed */ privateAggregateagg=newConcreteAggregate(); publicvoidoperation(){ it=agg.createIterator(); while(! it.isDone()){ System.out.println(it.currentItem().toString()); it.next(); } } publicstaticvoidmain(String[]args){ Clientclient=newClient(); client.operation(); } } (3)其它示例类图 十七、责任链(ChainofResponsibility)模式 (1)示例类图 (2)示例代码清单 packagecom.javapatterns.chainofresp.flowerpassingthread; abstractclassPlayer{ abstractpublicvoidhandle(); /** *@linkaggregation */ privatePlayersuccessor; publicPlayer(){ successor=null; } protectedvoidsetSuccessor(PlayeraSuccessor){ successor=aSuccessor; } publicvoidnext(){ if(successor! =null){ successor.handle(); }else{ System.out.println("Programterminated."); } } } packagecom.javapatterns.chainofresp.flowerpassingthread; classJiaBaoYuextendsPlayer{ publicJiaBaoYu(PlayeraSuccessor){ this.setSuccessor(aSuccessor); } publicvoidhandle(){ if(DrumBeater.stopped){ System.out.println("JiaBaoYugottadrink! "); }else{ System.out.println("JiaBaoYupassed! "); next(); } } } packagecom.javapatterns.chainofresp.flowerpassingthread; classJiaHuanextendsPlayer{ publicJiaHuan(PlayeraSuccessor){ this.setSuccessor(aSuccessor); } publicvoidhandle(){ if(DrumBeater.stopped){ System.out.println("JiaHuangottadrink! "); }else{ System.out.println("JiaHuanpassed! "); next(); } } } packagecom.javapatterns.chainofresp.flowerpassingthread; classJiaMuextendsPlayer{ publicJiaMu(PlayeraSuccessor){ this.setSuccessor(aSuccessor); } publicvoidhandle(){ if(DrumBeater.stopped){ System.out.println("JiaMugottadrink! "); }else{ System.out.println("JiaMupassed! "); next(); } } } packagecom.javapatterns.chainofresp.flowerpassingthread; classJiaSheextendsPlayer{ publicJiaShe(PlayeraSuccessor){ this.setSuccessor(aSuccessor); } publicvoidhandle(){ if(DrumBeater.stopped){ System.out.println("JiaShegottadrink! "); }else{ System.out.println("JiaShepassed! "); next(); } } } packagecom.javapatterns.chainofresp.flowerpassingthread; classJiaZhengextendsPlayer{ publicJiaZheng(PlayeraSuccessor){ this.setSuccessor(aSuccessor); } publicvoidhandle(){ if(DrumBeater.stopped){ System.out.println("JiaZhenggottadrink! "); }else{ System.out.println("JiaZhengpassed! "); next(); } } } packagecom.javapatterns.chainofresp.flowerpassingthread; importjava.util.Timer; importjava.util.TimerTask; publicclassDrumBeater{ privatestaticPlayerfirstPlayer; publicstaticbooleanstopped=false; Timertimer; staticpublicvoidmain(String[]args){ DrumBeaterdrumBeater=newDrumBeater(); JiaMujiaMu=newJiaMu(null); jiaMu.setSuccessor(newJiaShe(newJiaZheng(newJiaBaoYu(newJiaHuan( jiaMu))))); drumBeater.startBeating (1); firstPlayer=jiaMu; firstPlayer.handle(); } publicvoidstartBeating(intstopInSeconds){ System.out.println("Drumbeatingstarted..."); timer=newTimer(); timer.schedule(newStopBeatingReminder(),stopInSeconds*1000); } classStopBeatingReminderextendsTimerTask{ publicvoidrun(){ System.out.println("Drumbeatingstopped! "); stopped=true; timer.cancel();//Terminatethetimerthread } } } 十八、命令(Command)模式 (1)示例类图 (2)示例代码清单 packagemand; publicinterfaceCommand{ voidexecute(); } packagemand; publicclassConcreteCommandimplementsCommand{ publicConcreteCommand(Receiverreceiver){ this.receiver=receiver; } publicvoidexecute(){ receiver.action(); } /** *@directed *@clientRolereceiver */ privateReceiverreceiver; } packagemand; publicclassInvoker{ publicInvoker(Commandcommand){ mand=command; } publicvoidaction(){ command.execute(); } /** *@linkaggregation *@directed */ privateCommandcommand; } packagemand; publicclassReceiver{ publicReceiver(){ //writecodehere } publicvoidaction(){ System.out.println("Actionhasbeentaken."); } } packagemand; publicclassClient{ publicstaticvoidmain(String[]args){ Receiverreceiver=newReceiver(); Commandcommand=newConcreteCommand(receiver); Invokerinvoker=newInvoker(command); invoker.action(); } } (3)其它示例类图 十九、备忘录(Memento)模式: 又称快照(Snapshot)模式或Token模式 1、“白箱”备忘录模式 (1)示例类图 (2)示例代码清单 packagecom.javapatterns.memento.whitebox; publicclassMemento{ privateStringstate; publicMemento(Stringstate){ this.state=state; } publicStringgetState(){ returnthis.state; } publicvoidsetState(Stringstate){ this.state=state; } } packagecom.javapatterns.memento.whitebox; publicclassOriginator{ privateStringstate; /** *@linkdependency *@labelwide */ /*#MementolnkMemento;*/ publicMementocreateMemento(){ returnnewMemento(state); } publicvoidrestoreMemento(Mementomemento){ this.state=memento.getState(); } publicStringgetState(){ returnthis.state; } publicvoidsetState(Stringstate){ this.state=state; System.out.println("Currentstate="+this.state); } } packagecom.javapatterns.memento.whitebox; publicclassCaretaker{ /** *@linkaggregation *@labelwide */ privateMementomemento; publicMementoretrieveMemento(){ returnthis.memento; } publicvoidsaveMemento(Mementomemento){ this.memento=memento; } } packagecom.javapatterns.memento.whitebox; publicclassClient{ privatestaticOriginatoro=newOriginator(); privatestaticCaretakerc=newCaretaker(); publicstaticvoidmain(String[]args){ o.setState("On"); //Storeinternalstate c.saveMemento(o.createMemento()); //Continuechangingoriginator o.setState("Off"); //Restoresavedstate o.restoreMemento(c.retrieveMemento()); } } 2、“白箱”备忘录模式 (1)示例类图 (2)示例代码清单 packagecom.javapatterns.memento.blackbox; publicinterfaceMementoIF{ } packagecom.javapatterns.memento.blackbox; classMementoimplementsMementoIF{ privateStringsavedState; /** *@directed *@labelIs-a-member-of */ privateOriginatorlnkOriginator; privateMemento(StringsomeState){ savedState=someState; } privatevoidsetState(StringsomeState){ savedState=someState; } privateStringgetState(){ returnsavedState; } } packagecom.javapatterns.memento.blackbox; publicclassOriginator{ publicOriginator(){ } privateStringstate; /** *@linkdependency *@labelwide */ /*#MementoIFlnkMementoIF;*/ publicMementoIFcreateMemento
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java与模式 Java 模式 重点 总结 06