java策略模式应用场景,java常用设计模式详解
00-1010背景问题:方案的应用;优缺点;应用抽象策略的组成;语境;本文继续介绍23个设计模式系列的策略模式。
00-1010这种情况在软件开发中经常遇到。实现某个功能有很多种算法或策略。我们可以根据不同的环境或条件选择不同的算法或策略来完成功能。如搜索、排序等。常见的方法是在类中硬编码。如果需要提供多种搜索算法,可以把这些算法写成一个类,在类中提供多种方法,每种方法对应一种特定的搜索算法;当然,这些搜索算法也可以封装在一个统一的方法中,通过if…else…或case等条件判断语句进行选择。这两种实现方法可以称为硬编码。如果需要添加新的搜索算法,需要修改封装算法类的源代码。要更改算法,还需要修改客户端调用代码。这个算法类封装了大量的搜索算法,会很复杂,很难维护。如果我们在客户端包含这些策略,这就更不可取了,这会导致客户端程序维护的庞大和困难,如果有大量的算法可供选择,问题会变得更加严重。
00-1010如何将算法与对象分离,使算法可以独立于使用它的客户而改变?
00-1010提取类中经常变化或者未来可能变化的部分作为接口,然后将这个对象的实例包含在类中,这样类的实例就可以在运行时随意调用实现这个接口的类的行为。比如定义一系列算法,把每个算法封装起来,让它们可以互换,这样算法就可以独立于使用它的客户而改变。这就是策略模式。
00-1010许多相关类只是行为不同。策略提供了一种用许多行为之一来配置类的方法。也就是说,系统需要动态地选择几个算法中的一个。当应用程序需要实现特定的服务或功能,并且该程序有多个实现时使用。一个类定义了多种行为,这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移到它们各自的策略类中,以替换这些条件语句。
00-1010 1.您可以动态更改对象的行为。
00-1010 1.客户端必须知道所有的策略类,并自己决定使用哪个策略类。2.策略模式会产生许多策略类。
00-1010上下文):配置有ConcreteStrategy对象。维护对策略对象的引用。您可以为策略定义一个接口来访问其数据。抽象策略类3360定义了所有支持算法的公共接口。使用上下文接口调用由ConcreteStrategy定义的算法。具体策略类3360用策略接口实现特定的算法。
00-1010的场景是这样的:刘备要在江东娶妻。临走前,诸葛亮给了赵云三招锦囊妙计,说按秘密打开就能解决棘手的问题。场景中有三个要素:三招(具体策略)、一个锦囊(环境)、赵云(召唤者)。
目录
公共接口策略{ public void operate();}三个实现类(ConcreteStrategy):妙招一:初抵吴。
类后门实现Isrategy { @ override public void operate(){ system . out . println(求乔帮忙,求给孙权施压,让孙权杀不了刘备);}}妙招二:要求吴国太开绿灯。
给与绿灯的类实现is strategy { @ override public void operate(){ system . out . println(要求吴国太给绿灯放行);}}妙招三:孙夫人会破战阵,挡住追兵。
公共类抹黑我实现is策略{ @ Override public void operate(){ system。出去。println(孙夫人断后,挡住追兵)
; }}
环境类( Context)
public class Context { private Strategy strategy; //构造函数,要你使用哪个妙计 public Context(Strategy strategy){ this.strategy = strategy; } public void setStrategy(Strategy strategy){ this.strategy = strategy; } public void operate(){ this.strategy.operate(); }}
下面就是使用的情况了
public class Zhaoyun { public static void main(String[] args) { Context context; System.out.println("----------刚到吴国使用第一个锦囊---------------"); context = new Context(new BackDoor()); context.operate(); System.out.println("n"); System.out.println("----------刘备乐不思蜀使用第二个锦囊---------------"); context.setStrategy(new GivenGreenLight()); context.operate(); System.out.println("n"); System.out.println("----------孙权的追兵来了,使用第三个锦囊---------------"); context.setStrategy(new BlackEnemy()); context.operate(); System.out.println("n"); }}
三招下来,搞得的周郎是赔了夫人又折兵。以上就是策略模式,多种不同解决方案动态切换,起到改变对象行为的效果。
更多设计模式: 23种设计模式系列
以上就是Java设计模式之策略模式示例详解的详细内容,更多关于Java设计模式策略模式的资料请关注盛行IT其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。