资源描述:
《java经典设计模式(3):十一种行为型模式(附实例和详解)-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、hva经典设计模式(3):I—种行为型模式(附实例和详解)-编程开发技术Java经典设计模式(3):十一种行为型模式(附实例和详解)原文出处:小宝鹄Java经典设计模式共冇21屮,分为三大类:创建型模式(5种)、结构型模式(7利
2、)和行为型模式(11利
3、)。木文主耍讲行为型模式,创建型模式和结构型模式可以看博主的另外两篇文章:Java经典设计模式之五大创建型模式(附实例和详解)、?Java经典设计模式之七大结构型模式(附实例和详解)。行为型模式细分为如下11种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。第一
4、类父类与子类(1)策略模式第二类两个类之间(3)观察者模式第三类类的状态(7)备忘录模式第四类通过中间类⑼访问者模式(2)模板方法模式(4)迭代子模式(8)状态模式(10)中介者模式(5)责任链模式(11)解释器模式(6)命令模式接下来对11种行为型模式逐个进行介绍。一、策略模式策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可冇可无,屈于辅助类,视实际需求是否添加),提供辅助函数。首先统一接口:packagecom.model,behaviour;
5、publicinterfaceICalculator{publicintcalculate(Stringexp);}辅助类:packagecom.model,behaviour;publicabstractclassAbstractcalculator{publicint[]split(Stringexp,Stringopt){Stringarray[]=exp.split(opt);intarraylnt[]=newint[2];arraylnt[0]二Integer,parselnt(array[0]);arrayInt[1]=Integer,parse!nt(array[1]);ret
6、urnarrayInt;}}三个实现类:packagecom.model,behaviour;publicclassPlusextendsAbstractcalculatorimplcmcntsICalculator{©Overridepublicintcalculate(Stringexp){intarrayTnt[]二split(exp,〃\+〃);returnarrayInt[0]+arrayInt[1];}}packagecom.model,behaviour;publicclassMinusextendsAbstractCalculatorimplcmcntsICalculato
7、r{©Overridepublicintcalculate(Stringexp){intarrayInt[]二split(exp,〃\-〃);returnarraylnt[0]-arraylnt[1];packagecom.model,behaviour;publicclassMultiplyextendsAbstractcalculatorimplementsICalculator{©Overridepublicintcalculate(Stringexp){intarraylnt[]=split(exp,〃\*〃);returnarrayInt[0]*arrayInt[1];}}测试
8、类:packagecom.model,behaviour;publicclassStrategyTest{publicstaticvoidmain(String[]args){Stringexp=ICalculatorcal二newMinus();intresult二cal.calculate(exp);System,out.println(exp+〃二〃+resuIt);策略模式的决定权在用户,系统木身提供不同算法的实现,新增或者删除算法,对各种算法做封装。因此,策略模式多用在算法决策系统中,外部用户只需要决定用哪个算法即可。二、模板方法模式解释一下模板方法模式,就是指:一个抽彖类中,有一
9、个主方法,再定义1…n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用。就是在Abstractcalculator类中定义一个主方法calculate,calculate()调用spilt()等,Plus和Minus分别继承Abstractcalculator类,通过对Abstractcalculator的调用实现对子类的调用,看下面的例子:p