欢迎来到天天文库
浏览记录
ID:43875908
大小:789.74 KB
页数:12页
时间:2019-10-16
《设计模式问答(3)-Java开发Java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、设计模式问答(3)-编程开发技术设计模式问答(3)木文作者:ImportNew・zdpg未经许口J,禁止转载!简介这篇文章是设计模式问答系列(1)和(2)的延续。在这篇文章里,我们将会介绍状态模式,策略模式,访问者模式,适配器模式和享元模式。如果你完全不了解设计模式或者你其实并不想通读这篇文章,你可以在这里看我们免费的视频?designpattern?Trainingandinterviewquestions/answers?o如果你还没冇读过我前边的系列,你口J以通过下面的链接阅读:1・设计模式问答(1):工程模式,抽象工程模式,构造器模式,原型模式,单例模式和命令模式2.设计模式
2、问答(2):解释器模式,迭代器模式,调停者模式,备忘录模式和观察者模式3.设计模式问答(4):桥接模式、组合模式、外观模式、职责链模式、代理模式以及模板模式•UML面试问题系列1??UMLPart1•UML面试问题系列2??UMLpart2你能解释下状态模式吗?状态模式允许一个对象根据对象的当前值改变自C的行为。参考下面的图片一“策略模式的例子”。这是一个开关操作的例子。如果灯泡的是关闭的状态,当你按下开关,灯泡会打开。如果灯泡是打开的状态,当你按下开关,灯泡将会关闭。简而言Z,状态模式就是根据状态改变行为。7、Figure:—策略模式的例子现在讣我们用C#来实现这个灯泡例子。图片“
3、策略模式正在进行”同时显示了类和客户端的代码。我们创建一个叫'cisState'的类,它包含一个enum类型其有'on'和'off'两种状态常量。我们定义了一个方法'PressSwitch',它会根据当前的状态切换自己的状态。在同一张图的右手边我们定义了一个客户端,它使用'cisState'类并调用其"PressSwitch()'方法。我们使用BdbisolfP««sSv.ilrhsrlvave3uD.curretx^BulbSLace=.Oil;puJj
4、licscrinaaecScaciis」ClientcodeconsununqthestateclassprivaLevoidfotnClickClicklot;jecu3enderfEv€:lczlj3ejpuklicvoidgre勻i匕uh①!"txr5t.Gre.Text.i£(cuxient3aLL'9cace二二.0£i>otoSt.^re・qlcSrac-u?0;else11IcuirentBuIL3cace==aCl.Ou:iDependirvgonatrnemebehaviouroftheobiectschanges,fCallthe•PressSv/itchmeth
5、odfromthedientanddisplaythestatusofthebulb匚urrentBuibStcte?-<»:t/1.-i•-.Off•・・、・••、、》、■・、S.、r*、••、叱I"•、•・.-:.・、、•、a、Figure:-状态模式正在进行你能解释下策略模式吗?策略模式是一个类内置的算法集,可以根据使用的类交换算法。当你想在运行时决定使用的算法,这个模式会冇用。让我们看一个实际屮策略模式如何工作的例子。以数学的计算为例,计算冇相加和相减的策略。图片“策略模式正在进行”以形象的方式说明同样的情形。己知两个数,根据策略给出结果。所以如果是相加策略,两个数将会相加,
6、如果是相减策略,将会得到相减的结果。这些策略只不过是算法。策略模式不过是对类内算法的封装而已。、‘•・Algorithms.•・••宀•・・・2八、•宀八Figure:-策略模式正在进行所以我们需要深入的第一件事就是如何封装类内的这些算法。下而的图片“封装算法”显示了'add'算法如何封装在'clsAddStatergy,类中,substract"算法如何封装在<clsSubstractStatergy,类屮。这两个类都继承自类'clsStratergy'并重定义了'calculate'方法。publicabscrastclasshtaterg^FpublicoJjstra匚tMai
7、ninterfacemeCalculate(meintNuirtoGrl,ir.tintNumber2);pubLi匚classclaAddStatercY:l:L二.eraypublicoverridemtCalcu丄LntIJ-.irtberl,mtmcNurtoer2)rctuiuintNuinber1-tintNuiubEE2;Add3tfl1erqyclasspublicclasscJsSuissEractsrarerg^r:r1arprgyp
此文档下载收益归作者所有