欢迎来到天天文库
浏览记录
ID:56099790
大小:42.00 KB
页数:12页
时间:2020-03-16
《设计模式结课论文.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《程序设计模式》结课论文2012—2013学年第二学期论文题目Java设计模式学生姓名学号专业班级指导教师2013年7月5日策略模式题记:一个设计模式是针对某一类问题的最佳解决方案,而且已经成功应用于许多系统的设计中,它解决了在某种特定情境中重复发生的某个问题,因此设计模式可以被定义为:设计模式是从许多优秀的软件系统中总结出成功的可复用的设计方案。策略模式就是众多优秀模式的一种。一、策略模式的概述:方法是类中的最重要的组成部分,一个方法的方法体有一系列语句构成,也就是说一个方法的方法体是一个算法。在某些设计中一个类的设计人员经常将可能涉及这样的问题:由于用户的需求变化,导致经常需要
2、修改类中某个方法的方法体,即不需要不断变化算法。策略模式就是处理算法不同变体的一中成熟模式,策略模式通过接口或是抽象类封装算法的标示,即在接口中定义一个抽象方法实现该接口的类将实现接口中抽像的方法。策略模式把针对一个算法标示的一系列具体算法分别封装在不同的类中,使得各个类给出的具体算法可以互相转换。二、策略模式的定义策略模式的别名是政策,是定义一系列算法,把他们一个个封装起来的并且使他们可以互相替换。本模式使得算法可以独立于使用它的客户而变化。策略模式就是处理算法不同变体的一中成熟模式,策略模式通过接口或是抽象类封装算法的标示,即在接口中定义一个抽象方法实现该接口的类将实现接口中抽
3、像的方法。策略模式把针对一个算法标示的一系列具体算法分别封装在不同的类中,使得各个类给出的具体算法可以互相转换。一、策略模式的结构和使用1、策略模式的结构:策略模式的结构中包含三种角色:.策略(Strategy):策略是一个接口‘该接口定义若干个算法标示,即定义了若干个抽象方法。.具体策略(ConcreteStrategy):具体策略是实现策略接口的类。具体策略实现策略借口所定义的抽象方法,即给出算法标示的具体算法。.上下文(Context):上下文是依赖于策略接口的类,即上下文包含有策略的声明的变量。上下文中提供一个方法,该方法委托策略所实现的策略借口中的方法。2.策略模式的使用
4、:策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。四、策略模式的优点和缺点策略模式的优点 (1)策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法或行为族。恰当使用继承可以把公共的代码移到父类里面,从而避免代码重复。 (2)使用策略模式可以避免使用多重条件(if-else)语句。多重条件语句不易维护,它把采取哪一种算法或采取哪一种行为的逻辑与算法或行为的逻辑混合在一起
5、,统统列在一个多重条件语句里面,比使用继承的办法还要原始和落后。策略模式的缺点(1)客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道算法或行为的情况。 (2)由于策略模式把每个具体的策略实现都单独封装成为类,如果备选的策略很多的话,那么对象的数目就会很可观。五、适合使用策略模式的场景应用场景: 1、多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。(例如FlyBehavior和QuackBehavior) 2、需要在不同情况下使
6、用不同的策略(算法),或者策略还可能在未来用其它方式来实现。(例如FlyBehavior和QuackBehavior的具体实现可任意变化或扩充) 3、对客户(Duck)隐藏具体策略(算法)的实现细节,彼此完全独立六、策略模式在java中的应用Java深入到一定程度,就不可避免的碰到设计模式这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循一定的编程模式,才能使自己的代码便于理解,易于交流,Strategy(策略)模式是比较常用的一个模式.应用场景:在涉及到一系列的算法的时候,可以考虑采用策略模式把一个个算法封装
7、成单独的类。通过注入不同的算法策略类,从而使得使用者得到不同的算法结果。在此写了7个java类来描述说明Strategy设计模式;1、SortStrategy.java排序算法策略接口2、SortBin.java二分法排序3、SortBubble.java冒泡排序4、SortHeap.java堆排序5、SortQuick.java快速排序6、Sorter.java排序算法使用者7、SortTest.java带有main方法的测试类===============1、So
此文档下载收益归作者所有