java策略模式讲解(策略模式例子)

今天给各位分享java策略模式讲解的知识,其中也会对策略模式例子进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

1、java策略模式应用场景为何?2、JAVA23种设计模式3、java中几种常见的设计模式4、java中的设计模式有那些,详细讲解一下5、Java中,状态模式和策略模式的区别6、java策略模式和工厂模式的区别

java策略模式应用场景为何?

我认为策略模式是java众多模式中最常用,最常见的一种模式。

一句话说,针对同一命令(或行为),不同的策略做不同的动作。 (个人总结 难免疏漏 海涵)

举例来说,一个接口有两个实现:

interface RunBehavior {

public void performRun();

}

class Run implements RunBehavior {

public void performRun() { System.out.println(” I can run!”); }

}

class JumpAsRun implements RunBehavior {

public void performRun() { System.out.println(“I cannot run, but I can jump!”); }

}

解释一下这段简单的程序

跑是一种行为(接口)

正常的动物都可以跑(class Run)

麻雀是不能跑的,它只能跳(class JumpAsRun)

这样的话,其实我们有了一个行为的请求,那就是跑,然后我们有两个策略供选择。

那么如何调用呢?

class Anmial {

RunBehavior runBehavior;

public void run() {

this.runBehavior.performRun();

}

public void setRunBehavior(RunBehavior runBehavior) {

this.runBehavior = runBehavior;

}

}

下面真正开始调用:

public class TestStrategy{

public static void main(String args[]) {

RunBehavior rb1 = new Run();

Animal tiger = new Animal();

tiger.setRunBehavior(rb1);

tiger.run();

RunBehavior rb2 = new JumpAsRun();

Animal bird = new Animal();

bird.setRunBehavior(rb2);

bird.run();

// 上面的老虎和鸟分别用了一个策略,下面让老虎用鸟的策略

// 看看会发生什么

tiger.setRunBehavior(rb2);

tiger.run();

// 其实策略模式的重点就在这儿,给对象传入什么样的策略,执行什么样的动作。

}

}

具体的还要你自己多思考了,推荐《Head First Desigh Pattern》

全手工敲入代码,估计你需要微调如果想运行的话

JAVA23种设计模式

设计模式主要分三个类型:创建型、结构型和行为型。

其中创建型有:

一、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点

二、Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。

三、Factory Method,工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类。

四、Builder,建造模式:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。

五、Prototype,原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。

行为型有:

六、Iterator,迭代器模式:提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。

七、Observer,观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新。

八、Template Method,模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。

九、Command,命令模式:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作。

十、State,状态模式:允许对象在其内部状态改变时改变他的行为。对象看起来似乎改变了他的类。

十一、Strategy,策略模式:定义一系列的算法,把他们一个个封装起来,并使他们可以互相替换,本模式使得算法可以独立于使用它们的客户。

十二、China of Responsibility,职责链模式:使多个对象都有机会处理请求,从而避免请求的送发者和接收者之间的耦合关系

十三、Mediator,中介者模式:用一个中介对象封装一些列的对象交互。

十四、Visitor,访问者模式:表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作。

十五、Interpreter,解释器模式:给定一个语言,定义他的文法的一个表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

十六、Memento,备忘录模式:在不破坏对象的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

结构型有:

十七、Composite,组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性。

十八、Facade,外观模式:为子系统中的一组接口提供一致的界面,fa?ade提供了一高层接口,这个接口使得子系统更容易使用。

十九、Proxy,代理模式:为其他对象提供一种代理以控制对这个对象的访问

二十、Adapter,适配器模式:将一类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作那些类可以一起工作。

二十一、Decrator,装饰模式:动态地给一个对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活。

二十二、Bridge,桥模式:将抽象部分与它的实现部分相分离,使他们可以独立的变化。

二十三、Flyweight,享元模式

23种设计模式要在这里详细的都说一遍内容实在太多了啊,推荐你一本好书《软件秘笈:设计模式那点事》,里面讲解的23中设计模式例子很生动,容易理解,还有JDK中设计模式应用情况,看了收获挺大的!百度里面搜“设计模式”,第一条中设计模式百度百科中就有首推该图书,浏览量在20几万以上的,不会错的。

祝你早日学会设计模式!

java中几种常见的设计模式

一共23种设计模式!

按照目的来分,设计模式可以分为创建型模式、结构型模式和行为型模式。

创建型模式用来处理对象的创建过程;结构型模式用来处理类或者对象的组合;行为型模式用来对类或对象怎样交互和怎样分配职责进行描述。

创建型模式用来处理对象的创建过程,主要包含以下5种设计模式:

 工厂方法模式(Factory Method Pattern)

 抽象工厂模式(Abstract Factory Pattern)

 建造者模式(Builder Pattern)

 原型模式(Prototype Pattern)

 单例模式(Singleton Pattern)

结构型模式用来处理类或者对象的组合,主要包含以下7种设计模式:

 适配器模式(Adapter Pattern)

 桥接模式(Bridge Pattern)

 组合模式(Composite Pattern)

 装饰者模式(Decorator Pattern)

 外观模式(Facade Pattern)

 享元模式(Flyweight Pattern)

 代理模式(Proxy Pattern)

行为型模式用来对类或对象怎样交互和怎样分配职责进行描述,主要包含以下11种设计模式:

 责任链模式(Chain of Responsibility Pattern)

 命令模式(Command Pattern)

 解释器模式(Interpreter Pattern)

 迭代器模式(Iterator Pattern)

 中介者模式(Mediator Pattern)

 备忘录模式(Memento Pattern)

 观察者模式(Observer Pattern)

 状态模式(State Pattern)

 策略模式(Strategy Pattern)

 模板方法模式(Template Method Pattern)

 访问者模式(Visitor Pattern)

推荐你一本好书:《软件秘笈:设计模式那点事》,里面讲解的23中设计模式例子很生动,容易理解,还有JDK中设计模式应用情况,看了收获挺大的!百度里面搜“设计模式”,第一条中设计模式百度百科中就有首推该图书,浏览量在20几万以上的,不会错的。好东西大家一起分享!

祝你早日学会设计模式!

java中的设计模式有那些,详细讲解一下

Java中的23种设计模式:

Factory(工厂模式),

Builder(建造模式),

Factory

Method(工厂方法模式),

Prototype(原始模型模式),Singleton(单例模式),

Facade(门面模式),

Adapter(适配器模式),

Bridge(桥梁模式),

Composite(合成模式),

Decorator(装饰模式),

Flyweight(享元模式),

Proxy(代理模式),

Command(命令模式),

Interpreter(解释器模式),

Visitor(访问者模式),

Iterator(迭代子模式),

Mediator(调停者模式),

Memento(备忘录模式),

Observer(观察者模式),

State(状态模式),

Strategy(策略模式),

Template

Method(模板方法模式),

Chain

Of

Responsibleity(责任链模式)

工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。

Java中,状态模式和策略模式的区别

策略模式通过封装一组相关算法,为Client提供运行时的灵活性。Client可以在运行时,选择任一算法,而不改变使用算法的Context。一些流行的策略模式的例子是写那些使用算法的代码,例如加密算法、压缩算法、排序算法。另一方面,状态模式允许对象,在不同的状态拥有不同的行为。因为现实世界中的对象通常都是有状态的,所以在不同状态,行为也不一样。例如,VM(自动售货机)只在hasCoin状态才给吐商品;不投币,是不会吐的。现在可以清楚的看出不同之处了:意图是不同的。状态模式帮助对象管理状态,而策略模式允许Client选择不同的行为。

另一个不那么容易能看出来的区别是:是谁促使了行为的改变。策略模式中,是Client提供了不同的策略给Context;状态模式中,状态转移由Context或State管理。另外,如果在State中管理状态转移,那么必须持有Context的引用。例如,在VM的例子中,State对象需要调用VM的setState()方法去改变的状态。另一方面,Strategy从不持有Context的引用,是Client把所选择的Strategy传递给Context。由于状态模式和策略模式的区别,是流行的Java设计原则类面试题之一,将会在本文探讨在Java中,状态模式和策略模式的异同,这可以加深理解。

(1)相似之处

看看状态模式和策略模式的UML图,就会发现结构非常相似。使用State对象改变自己行为的对象被称为Context对象;相似的,使用Strategy对象改变自己行为的对象叫Context对象。记住,Client和Context打交道。在状态模式中,Context把方法调用委托给当前的状态对象,而在策略模式中,Context使用的Strategy对象,是被当做参数传递过来的,或在Context对象被创建时就被提供的。

这是专为经典的VM问题而设计的状态模式UML类图。可以看出,VM的状态是个接口,表示不同状态的具体实现。每一个状态都持有Context的引用,用来管理由Context触发的行为导致的状态转移。

这是专为实现排序功能而设计的策略模式UML类图。因为存在很多排序算法,该模式让Client在排序时选择适当的算法。事实上,Java的集合框架就使用这个模式,实现了用来排序的Collections.sort()方法。不同的是,不允许Client选择排序算法,而是让传递Comparator或Comparable接口的实例来指定比较策略。

(2)不同之处

策略模式封装了一组相关算法,允许Client在运行时使用可互换的行为;状态模式帮助一个类在不同的状态显示不同的行为。

状态模式封装了对象的状态,而策略模式封装算法或策略。因为状态是跟对象密切相关的,不能被重用;而通过从Context中分离出策略或算法,可以重用。

在状态模式中,每个状态通过持有Context的引用,来实现状态转移;但是每个策略都不持有Context的引用,只是被Context使用。

策略实现可以作为参数传递给使用的对象,例如Collections.sort(),参数包含一个Comparator策略。另一方面,状态是Context对象自己的一部分,随着时间的推移,Context对象从一个状态转移到另一个状态。

虽然都符合OCP原则,策略模式也符合SRP原则(单一职责原则),因为每个策略都封装自己的算法,且不依赖其他策略。一个策略的改变,并不会导致其他策略的变化。

另一个理论上的不同:策略模式定义了对象“怎么做”的部分。例如,排序对象怎么对数据排序。状态模式定义了对象“是什么”和“什么时候做”的部分。例如,对象处于什么状态,什么时候处在某个特定的状态。

状态模式中很好的定义了状态转移的次序;而策略模式并无此需要:Client可以自由的选择任何策略。

一些常见的策略模式的例子是封装算法,例如排序算法,加密算法或者压缩算法。如果看到代码需要使用不同类型的相关算法,那么考虑使用策略模式吧。而识别何时使用状态模式是很简单的:如果需要管理状态和状态转移,但不想使用大量嵌套的条件语句,那么就是了。

最后但最重要的一个不同之处是,策略的改变由Client完成;而状态的改变,由Context或状态自己。

java策略模式讲解(策略模式例子)

java策略模式和工厂模式的区别

工厂模式是创建型模式

策略模式是行为性模式

一个关注对象创建

一个关注行为的封装

策略模式就是定义一系列的算法,这些算法可以在需要的时候替换和扩展.工厂模式是生成型的模式,在你需要的时候构建具体的实例.

在下面的情况下应当考虑使用策略模式:

1. 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。

2.

一个系统需要动态地在几种算法中选择一种。那么这些算法可以包装到一个个的具体算法类里面,而这些具体算法类都是一个抽象算法类的子类。换言之,这些具体

算法类均有统一的接口,由于多态性原则,客户端可以选择使用任何一个具体算法类,并只持有一个数据类型是抽象算法类的对象。

3. 一个系统的算法使用的数据不可以让客户端知道。策略模式可以避免让客户端涉及到不必要接触到的复杂的和只与算法有关的数据。

4. 如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。此时,使用策略模式,把这些行为转移到相应的具体策略类里面,就可以避免使用难以维护的多重条件选择语句,并体现面向对象设计的概念。

策略模式的优点和缺点

策略模式有很多优点和缺点。它的优点有:

1. 策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法或行为族。恰当使用继承可以把公共的代码移到父类里面,从而避免重复的代码。

2.

策略模式提供了可以替换继承关系的办法。继承可以处理多种算法或行为。如果不是用策略模式,那么使用算法或行为的环境类就可能会有一些子类,每一个子类提

供一个不同的算法或行为。但是,这样一来算法或行为的使用者就和算法或行为本身混在一起。决定使用哪一种算法或采取哪一种行为的逻辑就和算法或行为的逻辑

混合在一起,从而不可能再独立演化。继承使得动态改变算法或行为变得不可能。

3. 使用策略模式可以避免使用多重条件转移语句。多重转移语句不易维护,它把采取哪一种算法或采取哪一种行为的逻辑与算法或行为的逻辑混合在一起,统统列在一个多重转移语句里面,比使用继承的办法还要原始和落后。

策略模式的缺点有:

1. 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道所有的算法或行为的情况。

2. 策略模式造成很多的策略类。有时候可以通过把依赖于环境的状态保存到客户端里面,而将策略类设计成可共享的,这样策略类实例可以被不同客户端使用。换言之,可以使用享元模式来减少对象的数量。

策略模式与很多其它的模式都有着广泛的联系。Strategy很容易和Bridge模式相混淆。虽然它们结构很相似,但它们却是为解决不同的问题

而设计的。Strategy模式注重于算法的封装,而Bridge模式注重于分离抽象和实现,为一个抽象体系提供不同的实现。Bridge模式与

Strategy模式都很好的体现了”Favor composite over inheritance”的观点。

java策略模式讲解的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于策略模式例子、java策略模式讲解的信息别忘了在本站进行查找喔。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月30日 18:27:33
下一篇 2024年3月30日 18:35:58

相关推荐

  • c语言改写模式,c语言实现修改功能

    c语言程序修改? 1、这个程序有4个错误,我都加粗了,第一个是m没有赋初值,第二个是while表达式中的ch=getchar()需要括号括起来,第三个是m=m*10+ch-0中的0也需要用单引号括起来,第四个是第2个while中为m!=0。 2、define容易造成误会,因为不符合一般的编程习惯,false 0, true 1;scanf放在你的那个地方是达…

    2024年5月23日
    3900
  • javaserver模式,javaserverlet

    什么是severlet,及在Java开发中的作用? 1、Servlet是用Java编写的Server端程序,它与协议和平台无关。Servlet运行于Java-enabled Web Server中。Java Servlet可以动态地扩展Server的能力,并采用请求-响应模式提供Web服务。 2、回答二:是severlet!主要是生成动态Web内容和编写的小…

    2024年5月23日
    4000
  • 关联分析序列模式c语言,关联分析序列模式c语言实现

    C语言编写一个序列程序 1、C语言大牛雅荐的七大经典排序算法 冒泡排序 比较相邻的元素。 2、int fibonacci(int n){ int a1 = 1;int a2 = 1;int next = a1 + a2;int i = 3;while(i n){ a1 = a2;a2 = next;next = a1 + a2;} return next;}…

    2024年5月23日
    4300
  • c语言单例模式,c语言设计模式书籍

    C/C++为什么日志模块要设计成单例模式的?有什么好处? 单例模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 优势就是单例模式的作用,这个类永远只有一个实例。还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收。 提供了对唯一实例的受控访问。由于在系统内存中只存在一个对象,因此可以 节约系统资源,当 需要频繁创建和销…

    2024年5月23日
    4000
  • java切换快捷键,我的世界java切换创造模式快捷键

    在Java开发中,Eclipse常用的快捷键有哪些? Ctrl + N:新建一个文件或者一个项目。 Ctrl + Shift + R:快速打开一个资源,包括文件、类、接口、枚举等。 Ctrl + Shift + T:快速打开一个Java类。 eclipse快捷键ctrl+shift+r:打开资源这可能是所有快捷键组合中最省时间的了。这组快捷键可以让你打开你的…

    2024年5月22日
    4200
  • java弱引用例子,java 弱引用 虚引用区别

    java中什么是强引用,弱引用和软引用 所以在 JDK.2 之后,Java 对引用的概念进行了扩充,将引用分为了:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference)4 种,这 4 种引用的强度依次减弱。 强引用在此之前我们介绍的内容中所使用的…

    2024年5月22日
    5400
  • java观察者模式视频,js观察者模式应用场景

    设计模式-快餐简解-【观察者模式】 在实际的项目开发中,观察者模式是一个使用频率非常高的模式,通过它的别名:发布——订阅模式也能知道它的主要作用就是用来解耦,将观察者和被观察者解耦,使它们的依赖性更小。 观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。观察者设计模式定义了对象间的一种一对多的组合关系,以便一个对象的状态发生变化时,所有…

    2024年5月22日
    4700
  • linuxspi从模式驱动的简单介绍

    linux2.4+arm9下spi总线驱动问题 先创建一个spi_board_info结构描述spi设备信息,调用spi_register_board_info将这个结构添加到board_list中。 水平不行,不一定对,仅供参考哈。如果只是从AD里读数据的话,用spi_read就可以了,定义一个8位的缓冲区和一个16位的缓冲区。然后把读到的2个8bit的数…

    2024年5月22日
    4500
  • 享元模式java例子,java建造者模式例子

    java中常用的设计模式有哪些? 常见的Java设计模式有以下10种:桥梁模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。合成模式(Composite):将对象组合成树形结构以表示部分-整体的层次结构。 单例模式(有的书上说叫单态模式其实都一样)该模式主要目的是使内存中保持1个对象 工厂模式 该模式主要功能是统一提供实例对象的引用…

    2024年5月22日
    3900
  • linux单用户状态,linux进入单用户模式

    linux单用户能进系统,正常模式无法进入 Linux系统Centos无法启动怎么解决 解决方法: 我们尝试了单用户是否可以登录啊,怎么做就不说了,耶可以登录,想了想是不是硬盘的问题呢,fsck修复了下还是不行。google吧。 另一个救援方法是进入单用户模式,这里你的计算机引导进入运行级1。系统装配你的本地文件系统,但不激活网络。你得到一个可用的系统维护外…

    2024年5月22日
    5100

发表回复

登录后才能评论



关注微信